Pregunta

Tengo una aplicación de interfaz gráfica de usuario implementada en wxpython, en la ventana principal, hay un listctrl utilizado para dispaly los nombres de los archivos. que estaba vacía en el comienzo mismo. el usuario hace clic en el "Archivo", luego "abierta", a continuación, elige un archivo para abrirlo, cuando esto se hace haciendo clic en el botón "OK", los nombres de los archivos se supone que es la exhibición en el listctrl. Pero parece que esto no funciona. He utilizado una cláusula print para comprobar, la cláusula print funciona. Aquí están mis códigos:

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 es la listctrl, se inicializa en el primer momento en que se lauched la ventana principal, pero cuando el OnDisplay fue provocado, las obras print "On display called", y los siguientes dos cláusulas print también trabajo. pero el listctrl en la ventana principal no ha cambiado, quiero decir, no mostró la level 1 y level 2, ni el fondo de la listctrl fue cambiado a rojo, lo que es la razón por favor? muchas gracias!

¿Fue útil?

Solución

Este es un ejemplo ejecutable que funciona en 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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top