我有一组代码
photo = PhotoImage(file = "computer.png")
label = Label(root, image = photo)
label.pack()
当它在主程序中定义时,它会执行。当它在函数中定义为
def callback():
photo = PhotoImage(file = "computer.png")
label = Label(root, image = photo)
label.pack()
print ("click!")
然后只有点击!被打印在Python shell上,没有别的。此代码用于在使用 Tkinter 开发的窗口窗体上显示图像
对函数的调用之前是使用菜单命令进行的,但是通过具有相同结果的按钮没有输出
这是内联代码
root = Tk()
root.title('View')
root.geometry('600x400')
photo = PhotoImage(file = "computer.png")
label = Label(root, image = photo)
label.pack()
这是函数
def callback():
photo = PhotoImage(file = "computer.png")
label = Label(root, image = photo)
label.pack()
print ("click!")
通过菜单命令调用
viewmenu.add_command(label="1:1 Zoom", command=About)
呼叫通过按钮单击">
b = Button(root, text="OK", command=callback)
b.pack()
预期的结果是在 Tkinter winform 上显示图像,实际结果只是打印点击! 在 Python shell 上
实际上,在内联代码中,照片对象保留在内存中。但是当你调用函数时,由于photo
是在函数作用域中定义的变量,所以当函数作业完成时,它会被销毁(它的显示和销毁速度如此之快,以至于你没有注意到它(。在下面的代码中,当photo
定义为全局变量时,您将获得所需的结果:
from tkinter import *
def callback():
global photo
photo = PhotoImage(file = "computer.png")
label = Label(root, image = photo)
label.pack()
print ("click!")
root = Tk()
b = Button(root, text="OK", command=callback)
b.pack()
root.mainloop()
您还可以将photo
定义为root
对象的属性:
def callback():
root.photo = PhotoImage(file = "2.png")
label = Label(root, image = root.photo)
label.pack()
print ("click!")
遵循面向对象的范式使代码的组织更容易。请阅读此答案以获取更多信息。