python - 当我在 Python3.7 上运行下拉列表程序时,Kivy 立即崩溃
问题描述
我又遇到了一些关于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 上运行它(在树莓派 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()
您可以在函数中添加一些内容,但不要忘记调用它。
推荐阅读
- html - 更改图像大小也会更改网页顶部的徽标大小?
- billboard.js - 如何禁用图例点击 billboard.js 图表?
- javascript - 编译失败。在新的 .js 文件(TaskList.js)(反应 js 组件)中未定义“嗨”
- r - Fviz_cluster 用于在 R 中可视化 k-means 结果
- flutter - 颤振模拟器未检测到鼠标区域
- javascript - 设置 Date.Parse 后自动触发 slert
- controller - 有没有办法从 Apex 的 Visualforce 页面获取字段查找 ID?
- r - is.numeric() 不能与 data[,i] 一起使用,但可以与 data$variable 一起使用?
- python - 保存 4D 数组而不丢失其格式
- c - iphdr struct src 和 dest 意外