【发布时间】:2019-11-23 12:08:52
【问题描述】:
我正在创建一个简单的 GUI,一个带有两个按钮的 frame,使用 wxpython 的开始按钮和停止按钮。当您按下开始按钮时,程序应从 1 开始打印数字。当您按下停止按钮时,程序应停止打印数字并打印“完成”。我正在使用一个while循环来连续打印数字。停止按钮应该“中断”while 循环,但它会导致程序冻结。我知道我应该以某种方式使用线程。我的问题是:如何将按钮事件创建为线程?
import wx
import time
class PanelOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
sizer = wx.BoxSizer(wx.VERTICAL)
self.btn_start = wx.Button(self, label="Start")
self.btn_start.Bind(wx.EVT_BUTTON, self.Loop)
self.btn_stop = wx.Button(self, label="Stop")
self.btn_stop.Bind(wx.EVT_BUTTON, self.Loop)
sizer.Add(self.btn_start, 0, wx.ALL|wx.EXPAND, 5)
sizer.Add(self.btn_stop, 0, wx.ALL|wx.EXPAND, 5)
self.SetSizer(sizer)
self.condition = True
def Loop(self, event):
count = 0
button = event.GetEventObject()
while self.condition:
labelName = button.GetLabel()
count = count+1
print(count)
time.sleep(1)
if labelName == 'Stop':
print("Done")
break
class FrameOne(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="First Frame")
panel = PanelOne(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = FrameOne()
app.MainLoop()
【问题讨论】:
标签: python multithreading while-loop wxpython