【发布时间】:2021-11-21 00:00:08
【问题描述】:
我是使用 kivymd 的新手,我需要生成一个有两个屏幕的应用程序,第二个屏幕在回收视图中显示一个 TwoLineListItem,我需要绑定一个函数,该函数将所选行上的文本放入主窗口的文本字段,但我收到此错误:
TypeError:click_supplier() 缺少 1 个必需的位置参数:'supplier_list_item'
这是我的代码的类似示例:
一年
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.list import OneLineListItem, TwoLineListItem
from kivy.uix.recycleview import RecycleView
from kivy.metrics import dp
suppliers=['Amazon', 'Ebay', 'Alibaba', 'Linio', 'Aliexpress']
suppliers_id=['198', '283', '343', '454', '203']
class MainWindow(Screen):
pass
class SelectSupplierWindow(Screen):
pass
class BrisaWindowManager(ScreenManager):
pass
class MainApp(MDApp):
#define build parameters
product_dialog=None
selected_products_list=[]
def build(self):
self.theme_cls.theme_style="Light"
self.theme_cls.primary_palette="Green"
return Builder.load_file('example.kv')
def go_to_screen(self, screen):
self.root.current=screen
#start suppliers list
def on_start(self):
self.set_list_of_suppliers()
#Autofill supplier search field--------------------------------------------------
def set_list_of_suppliers(self, text="", search=False):
def add_supplier_item(name_supplier):
self.root.get_screen('select_supplier').ids.suppliers_rv.data.append(
{
"viewclass": "TwoLineListItem",
"text": name_supplier,
"secondary_text": f'Code: {suppliers_id[suppliers.index(name_supplier)]}',
"on_release": self.click_supplier,
}
)
self.root.get_screen('select_supplier').ids.suppliers_rv.data = []
for name_supplier in suppliers:
if search:
if text.lower() in name_supplier.lower():
add_supplier_item(name_supplier)
else:
add_supplier_item(name_supplier)
def click_supplier(self, supplier_list_item):
self.root.get_screen('main').ids.oc_supplier.text=supplier_list_item.text
self.go_to_screen('main')
MainApp().run()
千伏
BrisaWindowManager:
MainWindow:
id:main_window
SelectSupplierWindow:
<MainWindow>
name: 'main'
MDBoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Brisa'
MDBottomNavigation:
MDBottomNavigationItem:
id: oc_screen
name: 'screen 1'
text: 'Purchase'
icon: 'clipboard-list'
MDBoxLayout:
orientation: 'vertical'
padding:dp(20)
spacing: dp(15)
MDTextField:
id: oc_supplier
hint_text: 'Select'
helper_text: 'Select'
helper_text_mode: 'on_focus'
mode: 'fill'
halign:'center'
on_focus:
app.root.current='select_supplier'
root.manager.transition.direction='up'
MDBottomNavigationItem:
name: 'screen 2'
text: 'Check'
icon: 'truck-check'
<SelectSupplierWindow>
name:'select_supplier'
MDBoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Select'
left_action_items: [['arrow-left', lambda x: app.go_to_screen(screen='main'), 'back']]
MDBoxLayout:
orientation:'vertical'
spacing: dp(10)
padding: dp(20)
MDBoxLayout:
adaptive_height:True
MDIconButton:
icon: 'magnify'
MDTextField:
id: search_field
on_text: app.set_list_of_suppliers(self.text, True)
RecycleView:
id: suppliers_rv
key_viewclass: 'viewclass'
key_size: 'height'
RecycleBoxLayout:
padding: dp(10)
default_size: None, dp(60)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
因为点击项函数需要被点击的行但我一直无法将此事件绑定到函数而触发错误。
【问题讨论】: