【发布时间】:2021-01-06 12:24:22
【问题描述】:
我正在尝试创建一个只有一个下拉列表和一个数据表 (MDDatatable) 的简单 kivy 应用程序。在我添加 MDdatatable 之前,下拉列表工作正常。添加 MDMDatatable 后,下拉菜单未打开。
这是添加了 MDdatatable 和下拉列表的完整代码。这个下拉菜单没有打开 -
from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
from kivy.uix.widget import Widget
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
my_screen = """
Screen:
BoxLayout:
orientation:'vertical'
MDToolbar:
title: 'test app'
FloatLayout:
id:s1
Button:
id:button2
text: "button1"
size_hint: (.1, .1)
pos_hint: {'x': 0.25, 'y': 0.9}
"""
class Test(MDApp):
def build(self):
screen = Builder.load_string(my_screen)
data_table = MDDataTable(pos_hint={'center_x': 0.5, 'center_y': 0.5},
size_hint=(0.9, 0.6),
rows_num=10,
column_data=[
("col1", dp(20)),
("col2", dp(20)),
("col3", dp(20)),
("col4", dp(20))
],
)
screen.add_widget(data_table)
self.dropdown2 = DropDown()
for index in range(2, 5):
btn = Button(text='%d' % index, size_hint_y=None, height=44)
btn.bind(on_release=lambda btn: self.dropdown2.select(btn.text))
self.dropdown2.add_widget(btn)
screen.ids.button2.bind(on_release=self.dropdown2.open)
self.dropdown2.bind(on_select=lambda instance, x: setattr(screen.ids.button2, 'text', x))
return(screen)
Test().run()
但是,如果我删除 MDDatatable,下拉菜单可以正常工作 -
from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
from kivy.uix.widget import Widget
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
my_screen = """
Screen:
BoxLayout:
orientation:'vertical'
MDToolbar:
title: 'test app'
FloatLayout:
id:s1
Button:
id:button2
text: "button1"
size_hint: (.1, .1)
pos_hint: {'x': 0.25, 'y': 0.9}
"""
class Test(MDApp):
def build(self):
screen = Builder.load_string(my_screen)
self.dropdown2 = DropDown()
for index in range(2, 5):
btn = Button(text='%d' % index, size_hint_y=None, height=44)
btn.bind(on_release=lambda btn: self.dropdown2.select(btn.text))
self.dropdown2.add_widget(btn)
screen.ids.button2.bind(on_release=self.dropdown2.open)
self.dropdown2.bind(on_select=lambda instance, x: setattr(screen.ids.button2, 'text', x))
return(screen)
Test().run()
我做错了什么?
【问题讨论】:
-
MDDataTable是ModalView的扩展,这意味着您无法在MDDataTable运行时与应用程序的其余部分进行交互。