ein Problem, über wxpython ListCtrl
Frage
Ich habe eine GUI-Anwendung in wxpython implementiert, auf dem Hauptfenster gibt es eine ListCtrl verwendet der Dateien, die Namen Dispaly. es war ganz am Anfang leer. der Benutzer die „Datei“ klickt, dann „offen“, wählt dann eine Datei zu öffnen, wenn das durch Klicken auf der Schaltfläche „OK“ erfolgt ist, wird der Name der Datei sein Display im ListCtrl soll. Aber es scheint, dass dies nicht funktioniert. Ich benutzte eine print
Klausel zu überprüfen, arbeitet die print
-Klausel. Hier sind meine Codes:
def OnDisplay(self):
print "On display called"
self.lc1.InsertStringItem(0, "level 1")
self.lc1.InsertStringItem(1, "level 2")
self.lc1.SetBackgroundColour(wx.RED)
print self.lc1.GetItemText(0)
print self.lc1.GetItemText(1)
self.lc1.Refresh()
lc1
ist die ListCtrl, wurde es ganz am Anfang initialisiert, wenn das Hauptfenster lauched wurde, aber als die OnDisplay
ausgelöst wurde, die print "On display called"
Werke und die folgenden zwei print
Klauseln auch Arbeit. aber die ListCtrl im Hauptfenster nicht ändern, ich meine, zeigte nicht die level 1
und level 2
, noch hat der Hintergrund des ListCtrl wurde zu rot geändert, was ist der Grund, bitte? vielen Dank!
Lösung
Hier ist ein lauffähiges Beispiel ist die auf Windows 7, Python funktioniert 2.6, wx 2.8.
import wx
class ListTest(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size=(380, 230))
panel = wx.Panel(self, -1)
self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
self.list.InsertColumn(0, 'col 1', width=140)
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.Add(self.list, 1, wx.EXPAND)
panel.SetSizer(hbox)
self.Centre()
self.Show(True)
self.Bind(wx.EVT_CHAR_HOOK, self.onKey)
def onKey(self, evt):
if evt.GetKeyCode() == wx.WXK_DOWN:
self.list.InsertStringItem(0, "level 1")
self.list.InsertStringItem(1, "level 2")
self.list.SetBackgroundColour(wx.RED)
self.list.Refresh()
print self.list.GetItemText(0)
print self.list.GetItemText(1)
else:
evt.Skip()
app = wx.App()
ListTest(None, 'list test')
app.MainLoop()