首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

2012-04-03 
关于wxpython界面的问题,求解刚学Python,用wxPython做界面时,发现通过事件来改变控件中的文本时,不会每次

关于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() 

热点排行