Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在kivy应用程序中添加MDdatatable后,下拉列表不会打开_Python_Kivy_Kivymd - Fatal编程技术网

Python 在kivy应用程序中添加MDdatatable后,下拉列表不会打开

Python 在kivy应用程序中添加MDdatatable后,下拉列表不会打开,python,kivy,kivymd,Python,Kivy,Kivymd,我正在尝试创建一个简单的kivy应用程序,它只有一个下拉列表和一个数据表(MDDatatable)。在我添加MDdatatable之前,下拉列表可以正常工作。添加MDataTable后,下拉列表不会打开 这是添加了MDdatatable和下拉列表的完整代码。该下拉列表不适用于此项- from kivymd.app import MDApp from kivy.lang import Builder from kivymd.uix.menu import MDDropdownMenu from k

我正在尝试创建一个简单的kivy应用程序,它只有一个下拉列表和一个数据表(MDDatatable)。在我添加MDdatatable之前,下拉列表可以正常工作。添加MDataTable后,下拉列表不会打开

这是添加了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()


我做错了什么?

所以我也在开发一个KivyMD应用程序,遇到了同样的问题——事实上,我仍然面临着这个问题。简言之,正如另一条评论所暗示的那样,KivyMD从ModalView继承而来。换句话说,它被认为是一个弹出窗口或基本上像一个永久的对话框。换句话说,当MDDataTable在屏幕上时,您无法通过有意设计与任何其他小部件进行交互

我建议查看GitHub页面,原始开发人员经常对此做出响应,我相信有人真的想出了一个替代方案来代替ModalView,尽管他们没有使用该解决方案来解决这个问题,但可能会解决它

自从我上次在谷歌上搜索后,我再也没有找到GitHub页面的这一部分,但我现在正在努力找到它

它需要进入Python文件,找到KivyMD库文件夹,进入uix目录,打开datatables.py,编辑它并希望它仍然有效

有些事情我要记住——KivyMD只是简单地使用Kivy,然后在上面添加额外的小部件。这意味着您可以使用普通的kivy小部件,这样您就可以找到其他人制作的表并使用它们。此外,KivyMD,如果我没记错的话,仍处于开发的alpha阶段,距离完成还有很长的路要走,所以它的边缘相当粗糙,他们仍在测试类似的东西,如果人们在使用DataTables开发应用程序时没有充分测试他们的应用程序,很可能很快就会修复它,他们将无法使用它,因此他们可能会收到更多的投诉。最后一件事,DataTables可能是迄今为止最不发达的小部件,在文档中,它甚至说在使用它们时要注意这一点

就在我发送这封信之前,我在谷歌上做了一个快速搜索,实际上已经找到了我所关注的github页面!最下面的一个例子是一个封闭的案例,它讨论了如何“修复它”。我认为他们完美地总结了这一点,他们说,你可以编辑每一个代码在你自己的机器上的工作方式,最后,如果它坏了,你可以复制并粘贴原始代码到其中,它会再次工作


所以我也在开发一个KivyMD应用程序,并且遇到了同样的问题——事实上,我仍然面临着这个问题。简言之,正如另一条评论所暗示的那样,KivyMD从ModalView继承而来。换句话说,它被认为是一个弹出窗口或基本上像一个永久的对话框。换句话说,当MDDataTable在屏幕上时,您无法通过有意设计与任何其他小部件进行交互

我建议查看GitHub页面,原始开发人员经常对此做出响应,我相信有人真的想出了一个替代方案来代替ModalView,尽管他们没有使用该解决方案来解决这个问题,但可能会解决它

自从我上次在谷歌上搜索后,我再也没有找到GitHub页面的这一部分,但我现在正在努力找到它

它需要进入Python文件,找到KivyMD库文件夹,进入uix目录,打开datatables.py,编辑它并希望它仍然有效

有些事情我要记住——KivyMD只是简单地使用Kivy,然后在上面添加额外的小部件。这意味着您可以使用普通的kivy小部件,这样您就可以找到其他人制作的表并使用它们。此外,KivyMD,如果我没记错的话,仍处于开发的alpha阶段,距离完成还有很长的路要走,所以它的边缘相当粗糙,他们仍在测试类似的东西,如果人们在使用DataTables开发应用程序时没有充分测试他们的应用程序,很可能很快就会修复它,他们将无法使用它,因此他们可能会收到更多的投诉。最后一件事,DataTables可能是迄今为止最不发达的小部件,在文档中,它甚至说在使用它们时要注意这一点

就在我发送这封信之前,我在谷歌上做了一个快速搜索,实际上已经找到了我所关注的github页面!最下面的一个例子是一个封闭的案例,它讨论了如何“修复它”。我认为他们完美地总结了这一点,他们说,你可以编辑每一个代码在你自己的机器上的工作方式,最后,如果它坏了,你可以复制并粘贴原始代码到其中,它会再次工作


MDDataTable是
ModalView
的扩展,这意味着当
MDDataTable
运行时,您无法与应用程序的其余部分交互。
MDDataTable
ModalView
的扩展,这意味着当
MDDataTable
正在运行时,您无法与应用程序的其余部分交互。