0

私はこの問題にとても悩まされています:

ListCtrlオブジェクト、TextCtrlオブジェクト、およびボタンを作成しました。まず、オブジェクトにいくつかのデータを入力しListCtrlます。ボタンを押すと、いくつかの文字列がオブジェクトに追加され、オブジェクトの変更TextCtrlに使用されます。SetStringItemListCtrl

ボタン機能でわかるように、time.sleep(2)各ループに追加しました。ボタンを押すとTextCtrl、文字列が挿入されるたびに更新されますがListCtrl、LOOP IS FINISHED までフリーズすると、正しい文字列が表示されます。

ListCtrl呼び出されたらすぐにオブジェクトを更新する方法を知りたいですSetStringItem

どんな助けでも大歓迎です。

コードは次のとおりです。

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()                                                                                                                                        
4

2 に答える 2