繁体   English   中英

当我在 Python3.7 上运行下拉列表程序时,Kivy 立即崩溃

[英]Kivy crashes instantly when I run a dropdown list program on Python3.7

我又遇到了 kivy 的一些问题 每当我运行以下程序时,python 立即崩溃,打开的窗口变为空白,我别无选择,只能关闭它。 一直试图解决这个问题一个小时左右,但似乎无法完成任何事情。

另外,我在回溯中没有错误。

在此先感谢您的帮助

from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App
from os import listdir


class CustomDropDown(DropDown):
    def __init__(self,**kwargs):
        self.layout = FloatLayout()
        self.fileList = []

    def dropdown(self):
        self.musDir = listdir(r'C://Users//danburnier//Desktop//PythonPrograms','r')
        for file in self.musDir:
            if file.endswith('.py'):
                btn = Button(text=str(file[:-3]),size_hint_y=None,height=44)

                btn.bind(on_release=lambda btn:self.select(btn.text))

                self.add_widget(btn)

class DropDownApp(App):

    def build(self):

        mainButton = Button(text='Touch me.',size_hint=(None,None))
        mainButton.bind(on_release=d.open)
        d.bind(on_select=lambda instance, x: setattr(mainButton, 'text', x))
        return CustomDropDown()

d = CustomDropDown()

if __name__ == '__main__':
    DropDownApp().run()

编辑:

我不知道它是否有帮助,但是在 Thonny(在 raspberry pi 4 上)运行它我得到以下回溯:

[INFO] [Logger      ] Record log in /home/pi/.kivy/logs/kivy_20-03- 
03_19.txt

[INFO] [Kivy        ] v2.0.0rc1, git-Unknown, 20200303

[INFO] [Kivy        ] Installed at "/home/pi/.local/lib/python3.7/site-
packages/kivy/__init__.py"

[INFO] [Python      ] v3.7.3 (default, Apr  3 2019, 05:39:12) 

[GCC 8.2.0]

[INFO] [Python      ] Interpreter at "/usr/bin/python3"

[INFO] [Factory     ] 184 symbols loaded

[INFO] [ImageLoaderFFPy] Using ffpyplayer 4.3.1

[INFO] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil, 
img_ffpyplayer (img_gif ignored)

[INFO] [Window      ] Provider: sdl2

[INFO] [GL          ] Using the "OpenGL" graphics system

[INFO] [GL          ] Backend used <sdl2>

[INFO] [GL          ] OpenGL version <b'2.1 Mesa 19.2.0-rc1'>

[INFO] [GL          ] OpenGL vendor <b'Broadcom'>

[INFO] [GL          ] OpenGL renderer <b'V3D 4.2'>

[INFO] [GL          ] OpenGL parsed version: 2, 1

[INFO] [GL          ] Shading version <b'1.20'>

[INFO] [GL          ] Texture max size <4096>

[INFO] [GL          ] Texture max units <16>

[INFO] [Window      ] auto add sdl2 input provider

[INFO] [Window      ] virtual keyboard not allowed, single mode, not docked

[INFO] [Text        ] Provider: sdl2
Backend terminated or disconnected.Fatal Python error: Segmentation fault

Current thread 0xb6fccad0 (most recent call first):
  File "/home/pi/.local/lib/python3.7/site-packages/kivy/core/window/__init__.py", line 1309 in add_widget
  File "/home/pi/.local/lib/python3.7/site-packages/kivy/app.py", line 927 in _run_prepare
  File "/home/pi/.local/lib/python3.7/site-packages/kivy/app.py", line 949 in run
  File "/home/pi/Desktop/Music21/ProgFin/ScrollMenu22.py", line 34 in <module>
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 1211 in _execute_prepared_user_code
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 1139 in wrapper
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 1152 in wrapper
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 1198 in execute_source
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 840 in _execute_source
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 826 in _execute_file
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 387 in _cmd_Run
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 195 in handle_command
  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 137 in mainloop
  File "/usr/lib/python3/dist-packages/thonny/backend_launcher.py", line 76 in <module> Use 'Stop/Restart' to restart ...

好吧,您的代码完全错误且充满错误。 首先,应打开 DropDown 以进行显示。 你不打开它。 其次,您的 CustomDropDown 类继承了 DropDown。 为什么? 你没有覆盖它的任何方法,你试图做什么? 第三,你在那个类中有一个函数,你没有调用它。 它不会自己运行。 第四,您有该类的一些对象,您对d变量中的对象进行了一些操作,但随后您将返回一个新的空白对象。 如果你返回d它也不会工作,但要注意那种东西。 您创建了布局但不使用它。

也许这会如您所愿:

class DropDownTest(BoxLayout):
    def __init__(self, **kwargs):
        super(DropDownTest, self).__init__(**kwargs)
        self.size_hint = (1, 1)

    def createdd(self):
        dropdown = DropDown()
        musDir = listdir(r'C://Users//danburnier//Desktop//PythonPrograms','r')
        for file in musDir:
            if file.endswith('.py'):
                btn = Button(text=str(file[:-3]),size_hint_y=None,height=44)
                btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
                self.dropdown.add_widget(btn)
        mainbutton = Button(text='Open DropDown', size_hint=(1, 1), on_release=dropdown.open)
        dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
        self.add_widget(mainbutton)

class DropDownApp(App):

    def build(self):
        self.ddtest = DropDownTest()
        self.ddtest.createdd()
        return self.ddtest

if __name__ == '__main__':
    DropDownApp().run()

你可以在函数中放置一些东西,但不要忘记调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM