【问题标题】:How to call a function when a button is pressed in tkinter?在tkinter中按下按钮时如何调用函数?
【发布时间】:2019-06-23 13:03:05
【问题描述】:

我已经编写了我的代码,以便在按下按钮“SignIn”时调用函数“Login”。但是,每次我运行代码并按下按钮时,都会显示错误消息“_tkinter.TclError:图像“pyimage2”不存在”,我似乎找不到修复我的代码的解决方案。

import tkinter


def Login():
    window = tkinter.Tk()
    window.title("Eat Well")
    window.geometry("295x400")
    UsernameLbl = tkinter.Label(window, text = "Username", fg= "white", bg= "black")
    Utext = tkinter.Entry(window)

    PasswordLbl = tkinter.Label(window, text = "Password", fg = "white", bg= "black")
    Ptext = tkinter.Entry(window, show="*")

    Login = tkinter.Button(window, text = "Login", fg = "black", bg = "honeydew", command = window.destroy  )
    window.configure(background= "#008bb5")
    Photo = tkinter.PhotoImage(file = "Eating.gif")
    w = tkinter.Label(window, image = Photo)




    w.pack()
    UsernameLbl.pack()
    Utext.pack()
    PasswordLbl.pack()
    Ptext.pack()
    Login.pack()
    window.mainloop()

def Mainscreen():
    window = tkinter.Tk()
    window.title("Eat Well")
    window.geometry("295x400")
    Question = tkinter.Label(window, text = "Would you like to create an account or login?", fg = "black", bg = "white")
    Create = tkinter.Button(window, text = "Create an account", fg = "white", bg = "black")
    SignIn = tkinter.Button(window, text =  "Login", fg = "white", bg = "black", command = Login)
    Quit = tkinter.Button(window, text = "Quit", fg = "white", bg = "black", command = window.destroy)
    window.configure(background = "#008bb5")
    Photo = tkinter.PhotoImage(file = "Eating.gif")
    w = tkinter.Label(window, image = Photo)
    w.pack()
    Question.pack()
    Create.pack()
    SignIn.pack()
    Quit.pack()
    window.mainloop()




Mainscreen()

当按下登录按钮时,主屏幕应该被销毁并且登录屏幕应该被打开。但是,目前,只要在主屏幕上按下登录按钮,主屏幕就会保持打开状态,并且登录屏幕会显示为空白屏幕。

【问题讨论】:

  • 你确定Login()中的图片路径有效吗?请分享完整的 Traceback 错误

标签: python tkinter


【解决方案1】:

这应该可行。注意使用

`tkinter.Toplevel()

Image.open。这是因为调用该函数的按钮本身就位于一个活动窗口中。

import tkinter
from PIL import Image, ImageTk


def Login():
    window = tkinter.Toplevel()
    window.title("Eat Well")
    window.geometry("295x400")
    UsernameLbl = tkinter.Label(window, text = "Username", fg= "white", bg= "black")
    Utext = tkinter.Entry(window)

    PasswordLbl = tkinter.Label(window, text = "Password", fg = "white", bg= "black")
    Ptext = tkinter.Entry(window, show="*")

    Login = tkinter.Button(window, text = "Login", fg = "black", bg = "honeydew", command = window.destroy  )
    window.configure(background= "#008bb5")
    im = Image.open("Eating.gif")
    Photo = ImageTk.PhotoImage(im)
    w = tkinter.Label(window)
    w.pack()
    UsernameLbl.pack()
    Utext.pack()
    PasswordLbl.pack()
    Ptext.pack()
    Login.pack()
    window.mainloop()

def Mainscreen():
    window = tkinter.Tk()
    window.title("Eat Well")
    window.geometry("295x400")
    Question = tkinter.Label(window, text = "Would you like to create an account or login?", fg = "black", bg = "white")
    Create = tkinter.Button(window, text = "Create an account", fg = "white", bg = "black")
    SignIn = tkinter.Button(window, text =  "Login", fg = "white", bg = "black", command = Login)
    Quit = tkinter.Button(window, text = "Quit", fg = "white", bg = "black", command = window.destroy)
    window.configure(background = "#008bb5")
    im = Image.open("Eating.gif")
    Photo = ImageTk.PhotoImage(im)
    w = tkinter.Label(window)
    w.pack()
    Question.pack()
    Create.pack()
    SignIn.pack()
    Quit.pack()
    window.mainloop()

【讨论】:

    【解决方案2】:

    好的,所以问题是您尝试同时运行两个 Tk() 实例,而您不应该这样做。原因描述herehere also

    您可以使用window = tkinter.Toplevel() 代替window = tkinter.Tk() 中的window = tkinter.Tk() 来解决如下问题:

    import tkinter
    
    def Login():
        # window = tkinter.Tk()
        window = tkinter.Toplevel()
        window.title("Eat Well")
        window.geometry("295x400")
        user_name_label = tkinter.Label(window, text="Username", fg="white", bg="black")
        user_name_text = tkinter.Entry(window)
    
        password_label = tkinter.Label(window, text="Password", fg="white", bg="black")
        password_text = tkinter.Entry(window, show="*")
    
        login = tkinter.Button(window, text="Login", fg="black", bg="honeydew", command=window.destroy)
        window.configure(background="#008bb5")
        photo = tkinter.PhotoImage(file="Eating.gif")
        w = tkinter.Label(window, image=photo)
    
        w.pack()
        user_name_label.pack()
        user_name_text.pack()
        password_label.pack()
        password_text.pack()
        login.pack()
        window.mainloop()
    
    def Mainscreen():
        window = tkinter.Tk()
        window.title("Eat Well")
        window.geometry("295x400")
        question = tkinter.Label(window, text="Would you like to create an account or login?", fg="black", bg="white")
        create = tkinter.Button(window, text="Create an account", fg="white", bg="black")
        sign_in = tkinter.Button(window, text="Login", fg="white", bg="black", command=Login)
        quit = tkinter.Button(window, text="Quit", fg="white", bg="black", command=window.destroy)
        window.configure(background="#008bb5")
        photo = tkinter.PhotoImage(file="Eating.gif")
        w = tkinter.Label(window, image=photo)
        w.pack()
        question.pack()
        create.pack()
        sign_in.pack()
        quit.pack()
        window.mainloop()
    
    Mainscreen()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      相关资源
      最近更新 更多