如何将图像转换为python代码

如何将图像转换为python代码,python,listview,wxpython,listviewitem,objectlistview,Python,Listview,Wxpython,Listviewitem,Objectlistview,我一直在尝试使用wxpython进行应用。我需要为我的GUI制作listview(facebook加载)。所以我选择ObjectListview。不幸的是,这是非常艰苦的工作和缺乏信息的初学者。我测试了“SimpleExamples”。它工作得很好。但我需要改变形象。尽管我自己努力想弄明白,我还是做不到。通过一些努力,我发现图像文件是python代码。但我不知道如何将图像转换为python代码 你能帮我吗???你的答案可能是我最好的答案 源代码来自 下面是ObjectListview中的Simp

我一直在尝试使用wxpython进行应用。我需要为我的GUI制作listview(facebook加载)。所以我选择ObjectListview。不幸的是,这是非常艰苦的工作和缺乏信息的初学者。我测试了“SimpleExamples”。它工作得很好。但我需要改变形象。尽管我自己努力想弄明白,我还是做不到。通过一些努力,我发现图像文件是python代码。但我不知道如何将图像转换为python代码

你能帮我吗???你的答案可能是我最好的答案

源代码来自

下面是ObjectListview中的SimpleExample2.py

# -*- 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()
还有exampleMages.py代码 我从未见过这些代码(x00\x10\x08)。我认为,如果我想在Objectlistview中使用image,我需要像这样更改代码(x00\x10\x08)

我理解错了吗??? 是否有其他方法更改图像。 (我需要更改图像大小、位置、字体和文本大小等…但首先我要更改图像)

我终于找到了答案^^ 它起作用了。但是Objectlistview一点也不容易。。。。我需要找到更多的方法来改变食物和大小。不管怎样,这是代码

    # -*- coding: utf-8 -*-
    #!/usr/bin/env python

    import datetime
    import wx
    import cStringIO
    from PIL import Image

    #from wx import ImageFromStream, BitmapFromImage, EmptyIcon

    # 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

    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())
    ######################################################################3333
            #open the image file
            imageFile = '111.png'
            data = open(imageFile, "rb").read()
            # convert to a data stream
            stream = cStringIO.StringIO(data)
            # convert to a bitmap
            bmp = wx.BitmapFromImage( wx.ImageFromStream(stream))
            musicImage = self.myOlv.AddImages(bmp)
   ###################################################################
   #########  changed code  ##########################################

            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()

使用wxPython在python文件中嵌入和镜像的标准方法是使用。一篇使用它的博客文章(见下半部分)。

以下是解决方案:

from wx import BitmapFromImage, ImageFromStream
from cStringIO import StringIO

def getGroup16Data():
    return \
'\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(ImageFromStream(StringIO(getGroup16Data())))
要转换图像,请使用以下代码:
请检查我是否省略了十六进制字符串的起始部分,而保留了
'\x89PNG…“

“我发现图像文件是python代码。”这是什么意思?“文件”作为动词的唯一含义是“在文件柜中组织”,这在上下文中似乎没有意义。@凯文:我的意思是将图像更改为python代码(x\xda\x017\x01\xc8\xfe\x)。根据这些代码(要使用的SimpleExamples),我需要将图像更改为pythoncode@Kevin:(你的另一条评论在哪里?…就在这里…不管怎样,从你丢失的评论中)我替换了一些这样的评论。但是它不起作用。你能给我一些建议吗?buf=open(“1.png”,“rb”).read()#buf=get_image_data()sbuf=StringIO.StringIO(ssbut)musicImage=self.myOlv.AddImages(ImageFromStre1am(sbuf))@Kevin这里正在更改代码。但我不工作。这就是我引用的代码。谢谢你~~解释一下你改变了什么,如果可能的话,解释一下原因是很有帮助的。
from wx import BitmapFromImage, ImageFromStream
from cStringIO import StringIO

def getGroup16Data():
    return \
'\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(ImageFromStream(StringIO(getGroup16Data())))