gpt4 book ai didi

python - 简单的图像查看器

转载 作者:太空狗 更新时间:2023-10-30 03:03:13 25 4
gpt4 key购买 nike

我是这个网站的新手,我正在尝试使用 Tkinter 在 Python 2.7 中创建一个简单的图像查看器,但是当我尝试在其中加载图像时,它没有显示任何内容!我敢打赌这是一件令人尴尬的事情很明显,但我不知道出了什么问题。我正在使用 Windows XP。这是我的代码:

from Tkinter import *
import tkFileDialog
from PIL import ImageTk, Image

root = Tk(className="Image viewer")

canvas_width = 800
canvas_height = 600
root.config(bg="white")

def openimage():
picfile = tkFileDialog.askopenfilename()
img = ImageTk.PhotoImage(file=picfile)
canvas.create_image(0,0, anchor=NW, image=img)

yscrollbar = Scrollbar(root)
yscrollbar.pack(side=RIGHT, fill=Y)

xscrollbar = Scrollbar(root, orient=HORIZONTAL)
xscrollbar.pack(side=BOTTOM, fill=X)

canvas = Canvas(root, width=canvas_width, height=canvas_height, yscrollcommand=yscrollbar.set, xscrollcommand=xscrollbar.set)
button = Button(root,text="Open",command=openimage)
button.pack(side=BOTTOM)
canvas.pack(side=TOP)
yscrollbar.config(command=canvas.yview)
xscrollbar.config(command=canvas.xview)

mainloop()

更新:当我删除文件浏览器并为其提供文件路径时它可以工作,但我想要文件浏览器并使用标签工作,但滚动条不能使用它,我希望能够滚动图片。

最佳答案

我在“The Tkinter PhotoImage Class”上发现无法将 PhotoImage 分配给函数中的局部变量,因为垃圾收集器将其删除。

所以你可以使用全局变量:

img = None

def openimage():
global img

picfile = tkFileDialog.askopenfilename()
img = ImageTk.PhotoImage(file=picfile)
canvas.create_image(0,0, anchor=NW, image=img)

或将图像分配给现有的小部件(例如canvas)

def openimage():
picfile = tkFileDialog.askopenfilename()
canvas.img = ImageTk.PhotoImage(file=picfile)
canvas.create_image(0,0, anchor=NW, image=canvas.img)

顺便说一下:你应该检查文件是否被选中

def openimage():
picfile = tkFileDialog.askopenfilename()
if picfile:
canvas.img = ImageTk.PhotoImage(file=picfile)
canvas.create_image(0,0, anchor=NW, image=canvas.img)

添加scrollregion,你就有了带工作滚动条的文件查看器

def openimage():
picfile = tkFileDialog.askopenfilename()
if picfile:
canvas.img = ImageTk.PhotoImage(file=picfile)
canvas.create_image(0,0, anchor=NW, image=canvas.img)
canvas.configure(canvas, scrollregion=(0,0,canvas.img.width(),canvas.img.height()))

关于python - 简单的图像查看器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com