【发布时间】:2020-05-14 08:36:15
【问题描述】:
我用 python 开发语音助手,我想用 kivyy 添加基本的 gui。 我正在用 kivy 编写基本的 gui,我想学习 kivy 框架,以便我试图通过创建 GUI 来提高自己。但是在这个项目中我有一个错误。首先,让我把我的代码放在这里。
class Assistant(App):
def build(self):
rl = RelativeLayout()
b1 = Button(size_hint=(.2, .2),
pos_hint={'x': 0, 'top': 1},
text="Click For Exit!",
color=(1,0, .15, 1))
b2 = Button(size_hint=(.2, .2),
pos_hint={'right': 1, 'top': 1},
text="Run Program!",
color=(8,1, .56, 4))
image = Image(source="background_img.jpg")
b2.bind(on_press=self.RunProgram)
b1.bind(on_press=self.CloseProgram)
textinput = TextInput(font_size=30,
size_hint_y=None,
height=100,
multiline=False,
allow_copy=True,
auto_indent=True)
textinput.bind(text=self.on_text)
textinput.bind(on_text_validate=self.on_enter)
rl.add_widget(image)
rl.add_widget(b1)
rl.add_widget(textinput)
rl.add_widget(b2)
这两个按钮有它们的功能。
def CloseProgram(self, event):
sys.exit()
def RunProgram(self, event):
while True:
jarvis.run(listen())
如您所见,我有 2 个按钮,一个是退出程序,另一个是监听用户。还有我有文本输入,用户可以输入一些东西来从键盘向助手发出命令。但不幸的是,当我点击“运行程序”按钮时,当我想输入一些东西或如果我想点击“退出程序”我的 GUI 停止工作后,一切都很好。 (一切都冻结和崩溃)但在后台我的助手继续听用户(我)。我怎么解决这个问题 ?
在这种情况下,当我删除 while 循环时一切正常,但是当用户想要与助手交谈时,每次都必须单击“运行程序”按钮。在这里我希望用户可以单击按钮或可以在程序在后台运行时键入文本输入。提前致谢。
更多信息:
我使用的是 windows10 和 python 版本 3.8.1
【问题讨论】:
-
如果您在主线程上执行
while True循环,该循环将保留主线程并且不允许其他任何东西在主线程上运行。主线程是处理 GUI 事件的地方。要允许 GUI 在运行while True循环的同时运行,您必须在另一个线程中运行循环。看看threading。 -
感谢您的评论。我会检查线程。我希望它会工作。
-
我使用 Theread 解决了我的问题。谢谢@JohnAnderson
标签: python python-3.x while-loop kivy kivy-language