2013-02-22 50 views
-2

我在网格上制作了一本Tkinter书,按钮按钮向左滚动,照片显示在多行的右列上,这样按钮就会显示出来。制作这本Tkinter书时。 我做了一个网格在Tkinter def工作如何?

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 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的时候是有效的”。 当我安定下来,我需要知识,我无法在网上找到,所以我问了这个问题: 那么我如何得到这个代码工作在一个def?

回答

0

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

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

+0

我现在对它进行测试。 – 2013-02-22 12:06:08

+0

right1.image = intro保存了我的整个软件我没有制作出任何一行代码的Tkinter书籍right1.image = intro – 2013-02-27 19:08:04

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