问题描述
我还是个新手。当我尝试运行代码时出现此错误。有人可以解释第三个论点的来源。是从循环吗?代码运行但 on_press 实际上产生了错误。
lambda 会为此工作吗。
这是经过修正的完整代码。 kivy 被称为 main.kv
TypeError: clear_widgets() takes from 1 to 2 positional arguments but 3 were given
现在的错误是 TypeError: 'Tab' object is not subscriptable
Python
class Main(MDApp):
def build(self):
return
def load_songs(self,storageLocation):
songs = []
# dictionary = {}
if Path('Books').is_dir():
for filename in storageLocation.glob('**/*.wav'):
songs.append(filename)
# Create dictionary for each subfolder(Chapter)
booksdir = [f for f in storageLocation.iterdir() if f.is_dir()]
# for value,Bookfolders in enumerate(booksdir):
for Bookfolders in booksdir:
# if Bookfolders not in dictionary:
# dictionary[Bookfolders] = []
# dictionary[Bookfolders].append('yahoooooo')
self.root.ids.Books.add_widget(
OneLineListItem(text=str(Bookfolders),on_press=lambda olli: self.root.ids.tabs.clear_widgets(Tab(Bookfolders)),pos_hint={"center_x": 1,"center_y": 1},on_release=partial(self.root.ids.tabs.add_widget,Tab(title=str(Bookfolders)))))
return songs
Main().run()
kivy
MDNavigationLayout:
ScreenManager:
Screen:
#BooksScreen:
#ChapterScreen:
MDBoxLayout:
orientation: "vertical"
MDToolbar:
title: "Chapters"
font_style: "Caption"
elevation:8
left_action_items: [['menu',lambda x: nav_drawer.set_state("open")]]
Widget:
MDTabs:
id: tabs
mdscreen
MDBoxLayout:
orientation: "vertical"
MDList
id: Books
#Options menu
MDNavigationDrawer:
id: nav_drawer
MDBoxLayout:
orientation: "vertical"
padding: "8dp"
spacing: "8dp"
<Tab>
MDList:
MDBoxLayout:
adaptive_height: True
MDLabel:
id: label
text: "Tab 0" #Tab Text
halign: "center"
MDFlatButton:
text: "ADD TAB"
on_release: app.add_tab()
MDFlatButton:
text: "REMOVE LAST TAB"
on_release: app.remove_tab()
MDFlatButton:
text: "GET TAB LIST"
on_release: app.get_tab_list()
解决方法
on_press
回调将 on_press
事件的源添加到指定的回调,创建第三个参数。您可以像这样使用 lambda
处理第三个参数:
on_press= lambda olli: self.root.ids.tabs.clear_widgets(Tab)
olli
是作为 OneLineListItem
事件源的 press
实例,被 lambda
函数丢弃。