【问题标题】:How do I get a tkinter box to show up in another tkinter window?如何让 tkinter 框显示在另一个 tkinter 窗口中?
【发布时间】:2020-05-22 15:46:32
【问题描述】:

我正在尝试为密码存储和散列系统制作 GUI,但遇到了障碍。我有 2 个按钮,一个用于登录,一个用于创建帐户。单击登录按钮时,将打开一个带有登录页面的新 tkinter 窗口。但是,登录按钮应该显示在第二页上,但它没有,我不知道为什么。这是完整系统的代码:

import tkinter
from tkinter import*

username = ("Tom")
password = ("test") 
usernameguess1 = ("")
passwordguess1 = ("")


def trylogin():
   print ("Trying to login...")
   if usernameguess.get() == username:
       print ("Complete sucsessfull!")
       messagebox.showinfo("Sucess ", "Successfully logged in.")
   else:
       print ("Error: (Incorrect value entered)")
       messagebox.showinfo("Error", "Sorry, but your username or password is incorrect. Try again")

def loginpage():
    #Gui Formatting
    window = tkinter.Tk()
    window.resizable(width=FALSE, height=FALSE)
    window.title("HasherTest_V0.1 Login")
    window.geometry("300x150")

    #Username and password boxes
    usernametext = tkinter.Label(window, text="Username:")
    usernameguess = tkinter.Entry(window)
    passwordtext = tkinter.Label(window, text="Password:")
    passwordguess = tkinter.Entry(window, show="*")

    usernameguess1 = usernameguess

    #login button

    attemptlogin = tkinter.Button(text="Login", command=trylogin)

    usernametext.pack()
    usernameguess.pack()
    passwordtext.pack()
    passwordguess.pack()
    attemptlogin.pack()
    window.mainloop()


#Gui Formatting (again)
window = tkinter.Tk() 
window.resizable(width=FALSE, height=FALSE)
window.title("HasherTest_V0.1")
window.geometry("300x150")

loginbutton = tkinter.Button(text="Login", command=loginpage)
loginbutton.pack()

这里是第二个窗口的代码。出于某种原因,我还必须导入 tkinter 消息框,或者我的 IDLE 错误。

import tkinter
from tkinter import *
from tkinter import messagebox

username = ("Tom")
password = ("test") 
usernameguess1 = ("")
passwordguess1 = ("")


def trylogin():
   print ("Trying to login...")
   if usernameguess.get() == username:
       print ("Complete sucsessfull!")
       messagebox.showinfo("Sucess ", "Successfully logged in.")
   else:
       print ("Error: (Incorrect value entered)")
       messagebox.showinfo("Error", "Sorry, but your username or password is incorrect. Try again")

#Gui Formatting
window = tkinter.Tk() 
window.resizable(width=FALSE, height=FALSE)
window.title("HasherTest_V0.1 Login")
window.geometry("300x150")


#Username and password boxes
usernametext = tkinter.Label(window, text="Username:")
usernameguess = tkinter.Entry(window)
passwordtext = tkinter.Label(window, text="Password:")
passwordguess = tkinter.Entry(window, show="*")

usernameguess1 = usernameguess

#login button
attemptlogin = tkinter.Button(text="Login", command=trylogin)

usernametext.pack()
usernameguess.pack()
passwordtext.pack()
passwordguess.pack()
attemptlogin.pack()
window.mainloop()

感谢您的帮助!

【问题讨论】:

  • 我在您的代码中看到多次调用Tk() - 并停止查看它;在这种情况下,任何事情都不可能正常工作。你必须使用Toplevel() 来创建额外的窗口。
  • @jasonharper 嗯好的,我是 tkinter 的新手,但你能告诉我怎么做吗?也许复制和编辑我的代码来告诉我怎么做?

标签: python python-3.x button tkinter messagebox


【解决方案1】:

这里。我完全修改了您的代码,并且它有效(据我所知)。

我完全删除了textvariableStringVar()。他们不需要。您的代码不起作用的原因是因为您检查了文件“string”的名称,但您需要添加“.txt”以获得完美的相等性。

代码:

import tkinter
from tkinter import*

from tkinter import messagebox

username = ("Tom")
password = ("test") 
usernameguess1 = ("")
passwordguess1 = ("")



def loginpage():
    #Gui Formatting
    root = tkinter.Toplevel()
    #root.resizable(width=FALSE, height=FALSE)
    root.title("HasherTest_V0.1 Login")
    root.geometry("300x150")

    #Username and password boxes
    usernametext = tkinter.Label(root, text="Username:")
    usernameguess = tkinter.Entry(root)
    passwordtext = tkinter.Label(root, text="Password:")
    passwordguess = tkinter.Entry(root, show="*")

    usernameguess1 = usernameguess
    def trylogin():
        print ("Trying to login...")
        if usernameguess.get() == username:
           print ("Complete sucsessfull!")
           messagebox.showinfo("Sucess ", "Successfully logged in.")
        else:
            print ("Error: (Incorrect value entered)")
            messagebox.showinfo("Error", "Sorry, but your username or password is incorrect. Try again")
        #login button

    attemptlogin = tkinter.Button(root, text="Login", command=trylogin)

    usernametext.pack()
    usernameguess.pack()
    passwordtext.pack()
    passwordguess.pack()
    attemptlogin.pack()
    window.mainloop()


#Gui Formatting (again)
window = tkinter.Tk()
window.resizable(width=FALSE, height=FALSE)
window.title("HasherTest_V0.1")
window.geometry("300x150")

loginbutton = tkinter.Button(window, text="Login", command=loginpage)
loginbutton.pack()

window.mainloop()

正如@stovfl 所提到的,我还冒昧地添加了Toplevel() 实例,而不是多次使用Tk()

希望这会有所帮助!

【讨论】:

  • @Tf0R24 没有问题 ^^
  • 乐于助人。 .
  • 如果您添加了对重要更改的描述,此答案会更好。否则,我们必须逐行和逐个字符地比较您的代码,以查看您所做的更改。
最近更新 更多