读书人

关于wxpython界面的有关问题求解

发布时间: 2012-04-03 12:38:19 作者: rapoo

关于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主循环正常运行,不会阻塞,
[解决办法]

Python code
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() 

读书人网 >perl python

热点推荐