如何在tkinter窗口中显示多个图像?

时间:2018-09-28 15:05:49

标签: python opencv matplotlib tkinter tkinter-canvas

我想显示7个不同的图像并将它们绘制在tkinter窗口中。我只知道使用OpenCV来显示它,它实际上在Tkinter GUI窗口之外显示图像。如何在GUI窗口中绘制图像?

Tkinter GUI:

enter image description here

2 个答案:

答案 0 :(得分:0)

我建议您阅读tkinter的文档,因为它有大量示例说明如何解决您的问题。我制作了一个示例GUI,它使用随机像素图片更新了GUI上的图像。请注意,有许多不同的方法可以做到这一点。就我而言,我开设了一门课程,在其中显示框架和按钮。该按钮调用一个函数以随机化图像(或根据情况更改为下一个图像),并调用该函数以新图像更新帧。希望它能给您一个快速的开始。干杯!

P.S .:对于多张图片,请使用更多标签和功能;)

代码:

import tkinter as tk
from tkinter import *
import cv2
import numpy as np
from PIL import Image, ImageTk


class DisplayImage:

    def __init__(self, master):        
        self.master = master
        master.title("GUI")
        self.image_frame = Frame(master, borderwidth=0, highlightthickness=0, height=20, width=30, bg='white')
        self.image_frame.pack()
        self.image_label = Label(self.image_frame, highlightthickness=0, borderwidth=0)
        self.image_label.pack()
        self.Next_image = Button(master, command=self.read_image, text="Next image", width=17, default=ACTIVE, borderwidth=0)
        self.Next_image.pack()

    def display_image(self, event=None):
        self.cv2image = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGBA)
        self.from_array = Image.fromarray(self.cv2image)
        self.imgt = ImageTk.PhotoImage(image=self.from_array)
        self.image_label.configure(image=self.imgt)

    def read_image(self, event=None):
        self.img = np.random.randint(255, size=(250,250,3),dtype=np.uint8)
        self.master.after(10, self.display_image)     


def main():
    root = tk.Tk()
    GUI = DisplayImage(root)
    GUI.read_image()
    root.mainloop()

if __name__ == '__main__':
    main()

输出:

enter image description here

答案 1 :(得分:0)

如果可以将tkinter与包装一起使用,则PySimpleGUI是一个不错的选择。

本周发布了一个新的演示应用程序,该应用程序演示了如何在GUI窗口中显示网络摄像头。另一个发布的Demo再次在GUI窗口中使用OpenCV播放视频文件。

enter image description here

生成该屏幕截图的代码可以在以下位置找到: Open and Play Video Using PySimpleGU + OpenCV

您可以从演示开始,然后通过添加更多按钮进行扩展。