WxPython ListCtrl:一列带有图像,一列带有字符串
WxPython ListCtrl: One Column with Images and One with a String
我遇到了这个问题并且几乎尝试了所有方法。我想要一列图像和一列字符串。我可以得到字符串,但不能得到图像。
这是我的资料:
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")
我收到一个错误 运行 你的代码。
但无论如何,我无法解释原因,但也许我认为您可以通过将 wx.IMAGE_LIST_NORMAL
更改为 wx.IMAGE_LIST_SMALL
来解决它
这是我尝试并为我工作的简单代码。
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 进行引用计数。因此,拥有 class 的用户必须存储它,否则将不会显示任何图像(因为我猜它是垃圾收集的)。也就是说,行
self.list=wx.ImageList(100,100)
不能改成
list=wx.ImageList(100,100)
然后会显示图片。
我遇到了这个问题并且几乎尝试了所有方法。我想要一列图像和一列字符串。我可以得到字符串,但不能得到图像。
这是我的资料:
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")
我收到一个错误 运行 你的代码。
但无论如何,我无法解释原因,但也许我认为您可以通过将 wx.IMAGE_LIST_NORMAL
更改为 wx.IMAGE_LIST_SMALL
这是我尝试并为我工作的简单代码。
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 进行引用计数。因此,拥有 class 的用户必须存储它,否则将不会显示任何图像(因为我猜它是垃圾收集的)。也就是说,行
self.list=wx.ImageList(100,100)
不能改成
list=wx.ImageList(100,100)
然后会显示图片。