簡體   English   中英

如何在tkinter中按下按鈕時調用函數?

[英]How to call a function when a button is pressed in tkinter?

我編寫了我的代碼,以便在按下“SignIn”按鈕時調用“登錄”功能。 但是,每次運行代碼並按下按鈕時,都會顯示錯誤消息“_tkinter.TclError:image”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()

按下SignIn按鈕時,應銷毀主屏幕並打開登錄屏幕。 但是,當前在主屏幕上按下登錄按鈕時,主屏幕保持打開狀態,登錄屏幕顯示為空白屏幕。

這應該工作。 注意使用

`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()

好的,問題是你試圖同時運行兩個Tk()實例,你不應該這樣做。 這里這里也描述原因

取而代之的window = tkinter.Tk()在你的Login()您可以使用window = tkinter.Toplevel()來解決類似下面的問題:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM