如何在tkinter中使用按钮命令打开窗口内的图像?

2024-07-03 06:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在tkinter中创建一个非常简单的图像查看器,它有两个简单的按钮“查看”和“关闭”。我的“关闭”按钮按预期运行,但我无法使用“查看”按钮打开文件目录中的指定图像。我尝试导入ImageTK来编写一个按钮命令来打开它,但到目前为止没有成功

import tkinter as tk
from PIL import ImageTk,Image

class image_viewer:
    def __init__(self, win):  
        
        self.root = win
        
        
        self.root.title('ImageViewer')
        self.root.geometry('400x350')

        
        self.btnView = tk.Button(text='View', command= ImageTk.PhotoImage(Image.open(r"C:\Users\SteveSmith\eclipse-workspace\SteveSmith-ex1\src\raw\pythonIsFun.jpg")))
        self.btnView.pack(side=tk.LEFT)
        self.btnView.place(x=20, y=265)
        
        self.btnClose = tk.Button(text='close', command=self.root.destroy)
        self.btnClose.pack(side=tk.LEFT)
        self.btnClose.place(x=65, y=265)

def main():
    root = tk.Tk()
    image_viewer(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Tags: 图像imageimportselfmaintkinterdefroot
1条回答
网友
1楼 · 发布于 2024-07-03 06:03:36

您的代码中有许多错误,之前我在选择其中一个错误并将其标记为另一个问题的副本后关闭了代码,该问题在涵盖该问题之前已被询问和回答

然而,根据你的评论,在仔细考虑之后,我决定重新打开它,并尝试解决我所看到的所有或至少大部分问题——否则,你可能会花很长时间来修复所有问题

结果如下:

from PIL import ImageTk, Image
import tkinter as tk

class ImageViewer:
    def __init__(self, root, image_filename):
        self.root = root
        self.image_filename = image_filename

        self.root.title('ImageViewer')
        self.root.geometry('400x350')

        self.canvas = tk.Canvas(self.root, width=300, height=300)
        self.canvas.place(x=10, y=10)

        self.btnView = tk.Button(text='View', command=self.view_image)
        self.btnView.place(x=20, y=265)

        self.btnClose = tk.Button(text='close', command=self.root.destroy)
        self.btnClose.place(x=65, y=265)

    def view_image(self):
        self.img = ImageTk.PhotoImage(Image.open(self.image_filename))  # Keep ref to image.
        self.canvas.create_image(20, 20, anchor=tk.NW, image=self.img)


def main(image_filename):
    root = tk.Tk()
    ImageViewer(root, image_filename)
    root.mainloop()

if __name__ == '__main__':
    main(r"C:\Users\SteveSmith\eclipse-workspace\SteveSmith-ex1\src\raw\pythonIsFun.jpg")

相关问题 更多 >