添加图像后,Python Tkinter按钮不再单击

时间:2020-05-29 01:24:37

标签: python tkinter

我一直在与Tkinter一起通过单击按钮创建新窗口。最近,我一直在尝试调整按钮的大小以适合屏幕大小。我尝试使用使用1 x 1像素图像的技巧,以便可以调整按钮的大小,但可以设置像素。每当我尝试将图像放在按钮上时,我就注意到不再起作用。如果我注释掉image参数,该按钮将开始工作。我不知道为什么。这是代码:

import tkinter as tk
import module1
class win1:
    def __init__(self,master):
        self.master = master
        self.master.geometry("400x400")
        self.frame=tk.Frame(self.master)
        #self.butnew("Hi there","2",win2)


        #####################           FullScreen           ###################
        w, h = master.winfo_screenwidth(), master.winfo_screenheight()
        self.master.overrideredirect(1)
        self.master.geometry("%dx%d+0+0" % (w, h))
        self.master.focus_set() # <-- move focus to this widget
        self.master.bind("<Escape>", lambda e: e.widget.quit())#Quits when escape is pressed

        for i in range(3):
            self.master.columnconfigure(i, weight=1, minsize=75)
            self.master.rowconfigure(i, weight=1, minsize=50)

            for j in range(0, 3):
                self.butnew("ji","g",module1.stonky,i,j)
        self.frame.pack()

    def butnew(self,text,number,_class,i,j):
        sizeWidth = int(self.master.winfo_screenwidth()/81)
        sizeHeight = int(self.master.winfo_screenheight()/81)
        pixel = tk.PhotoImage(width=sizeWidth, height=sizeWidth)
        tk.Button(self.frame,
                  text = text,
                  image=pixel,#If i comment out this line it works
                  #width=sizeWidth,
                  #height=sizeHeight,
                  compound="center",
                  command= lambda: self.new_window(number,_class)).grid(row=i,
                                                                        column=j,
                                                                        padx =3,
                                                                        pady=4)

    def new_window(self,number,_class):
        self.new = tk.Toplevel(self.master)
        _class(self.new,number)




root = tk.Tk()
app = win1(root)
root.mainloop()

1 个答案:

答案 0 :(得分:1)

这是因为图像是在函数内部创建时被垃圾收集的。您需要保留对图像的引用:

float MoveDirectionY = jumpForce * Physics.gravity.y;