проблема с wxpython listctrl - PullRequest
       36

проблема с wxpython listctrl

0 голосов
/ 27 августа 2010

Я получил приложение с графическим интерфейсом, реализованное в wxpython, в главном окне есть listctrl, используемый для отображения имен файлов. в самом начале было пусто. пользователь нажимает кнопку «Файл», затем «открыть», а затем выбирает файл для открытия, после чего, нажав кнопку «ОК», имена файлов должны отображаться в listctrl. Но похоже, что это не работает. Я использовал предложение print для проверки, предложение print работает. Вот мои коды: </p> <pre><code>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 - это listctrl, он был инициализирован в самом начале, когда было запущено главное окно, но когда было запущено OnDisplay, работает print "On display called", и следующие два предложения print также работают. но listctrl в главном окне не изменился, я имею в виду, не отображал level 1 и level 2, а также не изменился фон listctrl на красный, в чем причина, пожалуйста? большое спасибо!

1 Ответ

0 голосов
/ 27 августа 2010

Вот работающий пример, который работает в 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()
...