wxpythonlistctrl:一列包含图像,另一列包含字符串

2024-05-19 08:59:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个问题,几乎什么都试过了。我想要一个带图像的列和一个带字符串的列。我能得到琴弦,但不能得到图像。在

以下是我所拥有的:

self.browserList=wx.ListCtrl(panel, pos=(20,150), size=(250,100),   
style.wx.LC_REPORT|wx.BORDER_SUNKEN)
self.browserList.InsertColumn(0, '', width=50)
self.browserList.InsertColumn(1, 'Browser: ', width=200)

self.list=wx.ImageList(40,40)
self.browserList.SetImageList(self.list, wx.IMAGE_LIST_NORMAL)
images=['Users/Default/Desktop/Project/firefoxlogo.png','Users/Default/Desktop/Project/chromelogo.png']
x=0
for i in images:
    img=wx.Image(i, wx.BITMAP_TYPE_ANY)
    img=wx.BitmapFromImage(img)
    browserimg=self.list.Add(img)
    self.browserList.InsertImageItem(x, 0)
    self.browserList.InsertImageItem(x, 0, browserimg)

self.browserList.SetStringItem(0, 1, "Mozilla Firefox")
self.browserList.SetStringItem(1, 1, "Google Chrome")

Tags: 图像selfprojectdefaultimgpngwidthusers
2条回答

我运行你的代码时出错。在

但不管怎样,我不能解释为什么,但也许我认为你可以通过将wx.IMAGE_LIST_NORMAL改为{}来解决这个问题

这里有一个简单的代码,我尝试并为我工作。在

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))
        panel = wx.Panel(self, -1)
        panel.SetBackgroundColour('white')
        self.browserList=wx.ListCtrl(panel, pos=(20,150), size=(250,100),style = wx.LC_REPORT|wx.BORDER_SUNKEN)
        self.browserList.InsertColumn(0, '', width=50)
        self.browserList.InsertColumn(1, 'Browser: ', width=200)

        self.list=wx.ImageList(40,40)
        self.browserList.SetImageList(self.list, wx.IMAGE_LIST_SMALL)
        images=['mozilla.png','chrome.png']
        x=0
        for i in images:
            img=wx.Image(i, wx.BITMAP_TYPE_ANY)
            img=wx.BitmapFromImage(img)
            browserimg=self.list.Add(img)
        self.browserList.InsertImageItem(x, 0)
        self.browserList.InsertImageItem(x, 1)

        self.browserList.SetStringItem(0, 1, "Mozilla Firefox")
        self.browserList.SetStringItem(1, 1, "Google Chrome")

class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()

希望有帮助。在

首先,更新Deepas对wxPython Phoenix的回答:

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))
        panel = wx.Panel(self, -1)
        panel.SetBackgroundColour('white')
        self.browserList=wx.ListCtrl(panel, pos=(20,150), size=(300,300),style = wx.LC_REPORT|wx.BORDER_SUNKEN)
        self.browserList.InsertColumn(0, '', width=50)
        self.browserList.InsertColumn(1, 'Browser: ', width=200)

        self.list=wx.ImageList(100,100)
        self.browserList.SetImageList(self.list, wx.IMAGE_LIST_SMALL)
        images=['mozilla.png','chrome.png']
        x=0
        for i in images:
            img=wx.Image(i, wx.BITMAP_TYPE_ANY)
            img=wx.Bitmap(img)
            browserimg=self.list.Add(img)
        self.browserList.InsertItem(x, 0)
        self.browserList.InsertItem(x, 1)

        self.browserList.SetItem(0, 1, "Mozilla Firefox")
        self.browserList.SetItem(1, 1, "Google Chrome")

class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()

然后是一般性评论。wxPython似乎没有引用ImageList。因此,用户创建的拥有类必须存储它,否则将不显示任何图像(因为它是垃圾收集)。也就是说,这条线

^{pr2}$

不能更改为

list=wx.ImageList(100,100)

然后会显示图像。在

相关问题 更多 >

    热门问题