-2

我在网格上制作了一本 Tkinter 书,导航按钮向下滚动左行,照片显示在右列上,跨越多行,因此按钮按应有的方式显示。在制作这本 Tkinter 书时。我在网格上做了一个按钮

left1 = Button(win, text=" Captian Scarlet ")# win, is root master
left1.configure(command=but1)# but1 is my first def
left1.grid(row=1, column=0)# all the buttons are on the left list

这显示和工作就像一个没有定义的按钮

然后我做了一个def

def but1():
    img = Image.open("captain_scarlett.gif")# loads the gif file
    intro = ImageTk.PhotoImage(img)# loads image drivers I belevie
    right1 = Label(win, image=intro)# I think Lable is used the same as html <span>
    right1.grid(row=0, column=1, rowspan=13)# image formatting to display correctly with buttons

因为当时我缺乏教育,我只能让图像在def之外显示。因此,我沮丧地发布了“此代码在未放入 def 时可以正常工作”。当我安顿下来后,我需要在网上找不到的知识,所以我问了一个问题:那么我如何让这段代码在 def 中工作?

4

2 回答 2

0

此代码可以正常工作。现在我的生产可以全速前进

这是完成的代码

def but1():
    img = Image.open("captain_scarlett.gif")
    intro = ImageTk.PhotoImage(img)
    right = Label(win, image=intro)
    right.grid(row=0, column=1, rowspan=14)
    right.image=intro
于 2013-02-22T20:44:42.267 回答
0

是什么让你认为它不起作用?在这方面,Tkinter 没有什么特别之处。任何在 def 之外工作的东西肯定在 def 内工作。所有 python 代码的唯一警告是相同的。例如,除非另有声明,否则您在 def 中创建的任何变量都是本地变量,并且对象(但不是小部件)可能会在 def 执行后被垃圾收集。

可能正在发生的事情是您正在创建图像并将对它的引用存储在局部变量中。当 def 停止执行时,图像对象被垃圾收集。您需要保留对可以保留的图像的引用。一个简单的解决方案可能是做right1.image=intro.

于 2013-02-22T11:47:36.160 回答