几个月前我开始在python中编程,我真的很喜欢它。 从一开始就非常直观和有趣。
起点数据: 我有一个linux mashine运行python 3.2.3我在GUI上有三个按钮来启动一个功能,一个停止该进程或proccesses(想法)。
来源如下:
def printName1(event):
while button5 != True
print('Button 1 is pressed')
time.sleep(3) # just for simulation purposes to get reaction time for stopping
return
print('STOP button is pressed')
def StopButton():
button5 = True
我尝试过,并尝试使用except,但主要问题是GUI(thinter)在进程运行期间当时没有响应。它存储输入并在第一个函数(printName1)完成后运行它。 我也在这里查看了stackoverflow,但解决方案并没有为我正常工作,他们遇到了与中断相同的问题。 我为那个(也许)基本问题道歉,但我在python中非常新,并花了几天时间搜索一个尝试。
有办法吗?解决方案可以通过线程进行吗?但是怎么样? 任何建议/帮助都非常感谢。
非常感谢!
答案 0 :(得分:0)
使用threading.Event
import threading
class ButtonHandler(threading.Thread):
def __init__(self, event):
threading.Thread.__init__(self)
self.event = event
def run (self):
while not self.event.is_set():
print("Button 1 is pressed!")
time.sleep(3)
print("Button stop")
myEvent = threading.Event()
#The start button
Button(root,text="start",command=lambda: ButtonHandler(myEvent).start()).pack()
#Say this is the exit button
Button(root, text="stop",command=lambda: myEvent.set()).pack()
答案 1 :(得分:0)
另外,您可能希望查看使用Tk.after。我发现它比线程更容易,更直观。 after命令花费时间(以毫秒为单位)等待,然后命令在该时间之后运行。
def printName1():
if button5 != True:
print('Button 1 is pressed')
else:
print('STOP button is pressed')
root.after(1000,printName1)
def stopButton():
button5 = True
root = Tk()
app = Frame(root)
app.pack()
stopbtn = Button(app, text='STOP', command=stopButton)
stopbtn.pack()
root.after(1000,printName1)
root.mainloop()
也许这个答案也会有所帮助:How do you create a Tkinter GUI stop button to break an infinite loop?