2010-08-26 5 views
0

J'ai une application graphique implémentée dans wxpython, dans la fenêtre principale, il y a un listctrl utilisé pour afficher les noms des fichiers. c'était vide au tout début. l'utilisateur clique sur le "Fichier", puis "ouvre", puis choisit un fichier à ouvrir, quand cela est fait en cliquant sur le bouton "ok", les noms du fichier sont censés être affichés dans le listctrl. Mais il semble que cela ne fonctionne pas. J'ai utilisé une clause print pour vérifier, la clause print fonctionne. Voici mes codes: un problème à propos de wxpython listctrl

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 est le listctrl, il a été initialisé au début lorsque la fenêtre principale a été lauched, mais quand le OnDisplay a été déclenchée, les print "On display called" œuvres, et les deux clauses print suivantes fonctionnent également. mais le listctrl sur la fenêtre principale n'a pas changé, je veux dire, n'a pas montré le level 1 et level 2, ni l'arrière-plan de la listctrl a été changé en rouge, quelle est la raison s'il vous plaît? Merci beaucoup!

+0

fonctionne très bien sur Python 2.6, 2.8 wxpython, Windows 7. – volting

+0

@volting: J'utilise python2.6 et windows vista ... – serina

+0

Il ne devrait pas y avoir de différence entre Vista et 7. Peut-être Quelque chose d'autre dans votre code affecte ... Je poste un exemple exécutable et vous pouvez voir si cela fonctionne pour vous – volting

Répondre

0

Voici un exemple exécutable qui fonctionne sur Windows 7, Python 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() 
Questions connexes