在一个OpenCV程序需要一个图形界面,比较简单的就是Python自带的tkinter库,网上的入门资料也比较多。
简单记录下遇到的问题;
第一个问题是图片的显示问题,tkinter本身只能显示gif格式的图片,但是大多数图片都是png等其他格式的,这时候就要借助PIL这个库了。参考:https://blog.csdn.net/jasonlee_lijiaqi/article/details/79632211
#encoding=utf-8 import tkinter as tk from PIL import Image, ImageTk class App(tk.Frame): def __init__(self, master=None): super().__init__(master, width=400, height=300) self.pack() self.pilImage = Image.open("CSDN.png") self.tkImage = ImageTk.PhotoImage(image=self.pilImage) self.label = tk.Label(self, image=self.tkImage) self.label.pack() def processEvent(self, event): pass if __name__ == '__main__': root = tk.Tk() app = App(root) root.mainloop()
第2个问题是没有报错,但图片(可能)会不出现,或者说是变成空白。
可以参考:
http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm
下面被我注释的w.x=bm ,因为图像没有被引用,因为Tkinter/Tk接口的问题,图像不会完全销毁,但是会变成空白。
from tkinter import * from PIL import Image,ImageTk class Application(Frame): def __init__(self,master=None): Frame.__init__(self,master) self.pack() self.initWidgets() def initWidgets(self): w = Label(self) #图片读取显示,借助PIL.Image img = Image.open('D:/lion.png') img = img.resize((640,480)) bm = ImageTk.PhotoImage(img) #w.x = bm #如果图片对象没有其他变量被引用,就可能被系统回收 w['image'] = bm w.pack() okBtn = Button(self,text="确定") okBtn['background'] = 'yellow' okBtn.pack() app = Application() app.master.title('标题') app.mainloop()