I have been tried to make application with wxpython. I needed to make listview for my GUI[facebook loading]. So I choose the ObjectListview. Unfortunately It is very hard work and lack of info for beginner. I tested 'SimpleExamples'. It works great. but I need to change the image. Despite all my efforts to figure out by myself, I couldn't. From some efforts, I found out that images file as python code. But I don't know how to convert images as python code
Can you help me??? Your answer could be my best answer.
source code from //github.com/adrianer/ObjectListView
Here is SimpleExample2.py from ObjectListview
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import datetime
import wx
# Where can we find the ObjectListView module?
import sys
sys.path.append[".."]
from ObjectListView import ObjectListView, ColumnDefn
import ExampleModel
import ExampleImages ******# We store our images as python code**Look at here please~****
class MyFrame[wx.Frame]:
def __init__[self, *args, **kwds]:
wx.Frame.__init__[self, *args, **kwds]
self.Init[]
def Init[self]:
self.InitModel[]
self.InitWidgets[]
self.InitObjectListView[]
def InitModel[self]:
self.songs = ExampleModel.GetTracks[]
def InitWidgets[self]:
panel = wx.Panel[self, -1]
sizer_1 = wx.BoxSizer[wx.VERTICAL]
sizer_1.Add[panel, 1, wx.ALL|wx.EXPAND]
self.SetSizer[sizer_1]
self.myOlv = ObjectListView[panel, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER]
sizer_2 = wx.BoxSizer[wx.VERTICAL]
sizer_2.Add[self.myOlv, 1, wx.ALL|wx.EXPAND, 4]
panel.SetSizer[sizer_2]
self.Layout[]
def InitObjectListView[self]:
groupImage = self.myOlv.AddImages[ExampleImages.getGroup16Bitmap[], ExampleImages.getGroup32Bitmap[]]
userImage = self.myOlv.AddImages[ExampleImages.getUser16Bitmap[], ExampleImages.getUser32Bitmap[]]
musicImage = self.myOlv.AddImages[ExampleImages.getMusic16Bitmap[], ExampleImages.getMusic32Bitmap[]]
soloArtists = ["Nelly Furtado", "Missy Higgins", "Moby", "Natalie Imbruglia",
"Dido", "Paul Simon", "Bruce Cockburn"]
def artistImageGetter[track]:
if track.artist in soloArtists:
return userImage
else:
return groupImage
def sizeToNiceString[byteCount]:
"""
Convert the given byteCount into a string like: 9.9bytes/KB/MB/GB
"""
for [cutoff, label] in [[1024*1024*1024, "GB"], [1024*1024, "MB"], [1024, "KB"]]:
if byteCount >= cutoff:
return "%.1f %s" % [byteCount * 1.0 / cutoff, label]
if byteCount == 1:
return "1 byte"
else:
return "%d bytes" % byteCount
self.myOlv.SetColumns[[
ColumnDefn["Title", "left", 120, "title", imageGetter=musicImage],
ColumnDefn["Artist", "left", 120, "artist", imageGetter=artistImageGetter],
ColumnDefn["Size", "center", 100, "sizeInBytes", stringConverter=sizeToNiceString],
ColumnDefn["Last Played", "left", 100, "lastPlayed", stringConverter="%d-%m-%Y"],
ColumnDefn["Rating", "center", 100, "rating"]
]]
self.myOlv.SetObjects[self.songs]
if __name__ == '__main__':
app = wx.PySimpleApp[1]
wx.InitAllImageHandlers[]
frame_1 = MyFrame[None, -1, "ObjectListView Simple Example 2"]
app.SetTopWindow[frame_1]
frame_1.Show[]
app.MainLoop[]
And there is the ExampleImages.py code I never seen those code[x00\x10\x08]. I think that if I want to use image in Objectlistview, I need to change the code something like this[x00\x10\x08].
from wx import ImageFromStream, BitmapFromImage, EmptyIcon
import cStringIO, zlib
def getGroup16Data[]:
return zlib.decompress[
'x\xda\x017\x01\xc8\xfe\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\
\x00\x00\x00\x10\x08\x02\x00\x00\x00\x90\x91h6\x00\x00\x00\x03sBIT\x08\x08\
\x08\xdb\xe1O\xe0\x00\x00\x00\xefIDAT[\x91\x85\x92\xc1u\xc30\x0cC\x117Sh\rt\
\r\xadA\xceD\xcc\x9150G\xc7P\x0f\xb2]5\xcf\xcf\xc1I\x96\xf8\x01\x89\xe6c\x8c\
\x01@\x92m\x00U\x85{\x8d1\xaaj\x8c1\xc6\x88\x88\x88\x18\x87\xaaj\xfd\x9c\xda\
&v&\x9c\x92\x14\x11$3s\xdd\xdfl\x03\x94\x9c\x99+2y\x92oF_\x00z\x8f\xde{kA\
\xf6\xd6\xba\x94\xad5+\x7f\xd0^\xafWk\xad\xf7\xfe\x97p\xaeH\x90\x98vRV\x85\
\x95\xb0\xc2\xca\xfc>\xcb\x9ek\xdc\x12n\xd8U\x01\x00\x16\xe4k\xe0]\xd6d\xff=\
\xba\xaa\xa4\xa5\x0fRD\xdc\x98l\x87\xd7\xbc\xbb\xbd\x1b\xf2\x03\xb0c$\x08I+`\
\x03\x8ck`]\xf2^\xea\xd9:K\x9aG\xb7\x8f\x9eW\xf3n\x91\x99$\x8f\xd1\xb0>\x90G\
\xf2\x13\xc7\x84f\xa6$\x92\xf6\xc5D\xecy\xe4c\x8e\xf7\xd49gUe[\xca\xfd_2H\
\xcev\xff\x02\x0b[\xa5cP|\xd5p\x00\x00\x00\x00IEND\xaeB`\x82\xf3\x99\x84Y' ]
def getGroup16Bitmap[]:
return BitmapFromImage[getGroup16Image[]]
def getGroup16Image[]:
stream = cStringIO.StringIO[getGroup16Data[]]
return ImageFromStream[stream]
#----------------------------------------------------------------------
Am I wrong understood??? Is there any other way to change the image. [I need to change the image size, position, fonts and size of text etc.... but First I want to change images]