Question

Je suis une application GUI mis en œuvre wxpython, dans la fenêtre principale, il y a un listctrl utilisé pour représenterez les noms des fichiers. il était vide au début. l'utilisateur clique sur le menu « Fichier », puis « ouvert », puis choisit un fichier pour l'ouvrir, lorsque cela se fait en cliquant sur le bouton « ok », le nom du fichier est censé être l'affichage dans le listctrl. Mais il semble que cela ne fonctionne pas. J'ai utilisé une clause de print pour vérifier, la clause fonctionne print. Voici mes 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 est le listctrl, il a été initialisé au début, lorsque la fenêtre principale a été lauched, mais quand on a déclenché la OnDisplay, les travaux de print "On display called", et les deux clauses suivantes print également. mais le listctrl dans la fenêtre principale n'a pas changé, je veux dire, ne montre pas le level 1 et level 2, ni ne l'arrière-plan de la listctrl a été changé en rouge, quelle est la raison s'il vous plaît? merci beaucoup!

Était-ce utile?

La solution

Voici un exemple runnable qui fonctionne sous Windows 7, Python 2.6, 2.8 wx.

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top