Python 简单图像查看器

Python 简单图像查看器,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我是这个网站的新手,我正在尝试使用Tkinter在Python 2.7中创建一个简单的图像查看器,但是当我尝试在其中加载图像时,它不会显示任何内容!,我打赌这是一件非常明显的事情,但我不知道出了什么问题。我正在使用Windows XP。这是我的密码: from Tkinter import * import tkFileDialog from PIL import ImageTk, Image root = Tk(className="Image viewer") canvas_width

我是这个网站的新手,我正在尝试使用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()

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

不知道代码中的问题,但您可以使用此功能代替您的功能:

def openimage():
    try:
        Artwork.destroy()
    except Exception:
        pass
    picfile = tkFileDialog.askopenfilename()
    img = ImageTk.PhotoImage(file=picfile)
    #canvas.create_image(0,0, anchor=NW, image=img)
    Artwork=Label(root,image=img)
    Artwork.img=img
    Artwork.pack(side=BOTTOM)#do packing urself

请注意,这是最小的实现。

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

因此,您可以使用全局变量:

img = None

def openimage():
    global img

    picfile = tkFileDialog.askopenfilename()
    img = ImageTk.PhotoImage(file=picfile)
    canvas.create_image(0,0, anchor=NW, image=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()))

我必须说,对于这个网站的新手来说,这是一个非常奇妙的问题——你给了我们你想要发生的事情,而不是发生了什么,以及似乎失败的代码。坚持下去,你就会走得更远。先试试.gif,再试试.jpg。告诉我们发生了什么。我尝试了一个.jpg,一个.png和一个.gif的可能的副本。是的,我已经尝试使用一个标签作为画布,但它不支持scrollbarsWell。你没有提到:P
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()))