سؤال

حصلت على تطبيق واجهة المستخدم الرسومية في Wxpython ، على النافذة الرئيسية ، هناك ListCtrl المستخدمة للاطلاع على أسماء الملفات. كان فارغا في البداية. ينقر المستخدم على "الملف" ، ثم "فتح" ، ثم يختار ملفًا لفتحه ، عند القيام بذلك عن طريق النقر على زر "OK" ، من المفترض أن يتم عرض أسماء الملف في ListCtrl. ولكن يبدو أن هذا لا يعمل. لقد استخدمت أ print جملة للتحقق ، print البند يعمل. ها هي رموزاتي:

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 هو القائمة ، تم تهيئته في البداية عندما كانت النافذة الرئيسية مملوءة ، ولكن عندما OnDisplay تم تشغيله ، print "On display called" يعمل ، والاثنان التاليين print الجمل تعمل أيضا. لكن ListCtrl على النافذة الرئيسية لم يتغير ، أعني ، لم يظهر level 1 و level 2, ، ولم يتم تغيير خلفية ListCtrl إلى اللون الأحمر ، ما هو السبب من فضلك؟ شكرا جزيلا!

هل كانت مفيدة؟

المحلول

فيما يلي مثال قابل للتشغيل يعمل على 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()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top