使用标签小部件使用Tkinter显示图像

时间:2018-08-13 14:55:27

标签: python image tkinter

我正在尝试在Tkinter类中使用PIL显示图像:

class PasswordCheck(Frame):
    def __init__(self,master=None):
            Frame.__init__(self,master)
            self.pack()

    def create_widgets(self):
            self.title=Label(self,text='Curretly using password')
            self.pwfield=Entry(self,text=self.password)
            self.web=Label(self,image=self.image)
            self.ok=Button(self)
            self.ok['text']='OK'
            self.ok['command']=root.destroy
            self.ok.pack(side='top')
            self.quit=Button(self,text="Quit",command=root.destroy)
            self.quit.pack(side='bottom')

    def setParms(self,password,image):
            self.password=password
            self.image=image

我需要提到我是Tkinter的初学者。我从网站(使用HTMLParser)创建图像,并因此设置窗口:

with open(authFile,'r') as f:
    lines=f.read().splitlines()
password=lines[1]
f=urllib.urlopen(URL)
parser=PWParser()
parser.feed(f.read())
response=requests.get(URL+imageURL.replace(" ","%20"))
img=PIL.Image.open(BytesIO(response.content))
root=Tk()
window=PasswordCheck(master=root)
window.setParms(password,img.convert('1').tobitmap())
window.create_widgets()
window.mainloop()

图像很好(img.show()),所以我将其转换为位图并将其传递给Tkinter类。运行脚本时,我收到一条错误消息,说静态char image_bits [] = {...不存在:

(无法发布回溯,表单错误地认为该代码格式不正确,请在此处寻求帮助)

我在多个地方读到了有关垃圾收集的信息,在显示该图像之前先将其清除,但尚不清楚如何停止该操作。如果是这样的话,如何防止删除'img'或还有其他问题? TIA。

2 个答案:

答案 0 :(得分:0)

我明白了。事实证明该图像必须是摄影图像。这是有效的:

window.setParms(password,PIL.ImageTk.PhotoImage(img))

答案 1 :(得分:0)

尝试一下:

import tkinter as tk

root = tk.Tk()
logo = tk.PhotoImage(file="program_logo.gif")

explanation = """At present, only GIF and PPM/PGM
formats are supported, but an interface 
exists to allow additional image file
formats to be added easily."""

w = tk.Label(root, 
             compound = tk.CENTER,
             text=explanation, 
             image=logo).pack(side="right")

root.mainloop()

program_logo.gif是您的徽标,但是.gif文件。

我是从以下站点获得的:https://www.python-course.eu/tkinter_labels.php

希望有帮助,再见:)