Как вызвать функцию при нажатии кнопки в tkinter? - PullRequest
0 голосов
/ 30 января 2019

Я написал свой код, чтобы при нажатии кнопки «Вход» вызывать функцию «Вход».Однако каждый раз, когда я запускаю код и нажимаю кнопку, отображается сообщение об ошибке «_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()

При нажатии кнопки входа в систему главный экран должен быть уничтожен, а экран входа в систему должен быть открыт.Однако в настоящее время всякий раз, когда кнопка входа в систему нажимается на главном экране, главный экран остается открытым, и экран входа в систему отображается как пустой экран.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Хорошо, проблема в том, что вы пытаетесь запустить два экземпляра 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()
0 голосов
/ 30 января 2019

Это должно работать.Обратите внимание на использование

`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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...