关于wxpython界面的问题,求解
刚学Python,用wxPython做界面时,发现通过事件来改变控件中的文本时,不会每次改变都显示出来,只会显示最后一次结果。请问有什么方法可以解决吗?
以下是我写的一个简单的界面程序来说明我的问题,点击按键后,文本中直接显示999,我想能看到文本中内容的变化。
[code=Python][/code]
import wx
class MyFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,size=(200,170))
panel = wx.Panel(self)
self.text = wx.TextCtrl(panel,pos = (45,20))
button = wx.Button(panel,pos = (55,60),label='Start')
self.Bind(wx.EVT_BUTTON, self.WirteText, button)
def WirteText(self,event):
for i in range(1000):
self.text.SetValue(unicode(i))
myapp = wx.App(redirect=False)
frame = MyFrame(None)
frame.Show()
myapp.MainLoop()
[解决办法]
按lz 的需求,还是用定时器吧
[解决办法]
你的for循环在wx的主线程里,运行到for的时候程序阻塞在那,导致wx的界面不会重新渲染,所以for循环之后才会显示当然是最后一个了,用定时器的话,其实是多了个线程,你的wx主循环正常运行,不会阻塞,
[解决办法]
import wximport timeclass MyFrame(wx.Frame): def __init__(self,parent): wx.Frame.__init__(self,parent,size=(200,170)) panel = wx.Panel(self) self.text = wx.TextCtrl(panel,pos = (45,20)) button = wx.Button(panel,pos = (55,60),label='Start') self.Bind(wx.EVT_BUTTON, self.WirteText, button) def WirteText(self,event): for i in range(1000): self.text.SetValue(unicode(i)) self.text.SetFocus() time.sleep(1)myapp = wx.App(redirect=False)frame = MyFrame(None)frame.Show()myapp.MainLoop()