我好這個問題困擾時,同時刷新的listctrl:如何使用setstringitem功能
我已經創建一個ListCtrl
對象,TextCtrl
對象,和一個按鈕。首先我將一些數據填入ListCtrl
對象中,當我按下按鈕時,它會將一些字符串追加到TextCtrl
對象中,並用SetStringItem
來修改ListCtrl
對象。
正如你可以在按鈕功能看,我在每一個循環加time.sleep(2)
。當我按下按鈕時,每次插入字符串時都會刷新TextCtrl
,但ListCtrl
只會凍結,直到LOOP IS FINISHED,然後它會顯示正確的字符串。
我想知道如何在調用SetStringItem
時立即刷新ListCtrl
對象。
任何幫助深表謝意。
下面是代碼:
import wx
import sys
import time
class Frame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, size=(450, 450))
self.panel = wx.Panel(self)
self.dl = wx.ListCtrl(self,-1,size=(300,100),style=wx.LC_REPORT)
self.dl.InsertColumn(0, 'File')
self.dl.InsertColumn(1, 'Progress')
self.dl.InsertColumn(2, 'State')
for row in range(3):
labels = [l+str(row) for l in "FILE PERCENT STATE".split()]
# sys.maxint inserts at the end of the list
index = self.dl.InsertStringItem(sys.maxint, labels[0])
self.dl.SetStringItem(index, 1, labels[1])
self.dl.SetStringItem(index, 2, labels[2])
self.Show(True)
button2 = wx.Button(self, label=u"test", pos=(15, 200), size=(60, 25))
self.Bind(wx.EVT_BUTTON, self.test, button2)
self.text = wx.TextCtrl(self, -1, pos=(80, 200), size=(200, 175), style=wx.TE_MULTILINE)
def test(self,event):
for i in range(3):
self.dl.SetStringItem(i,1,"HELLO")
self.text.AppendText("HELLO")
time.sleep(2)
app = wx.App()
Frame(None)
app.MainLoop()