Tkinter:更新标签内容和按钮命令[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我有以下代码有几个问题。第一个是createUser()命令将在窗口出现后立即运行。

第二个是我的按钮绑定到该命令将不会运行命令本身(我已经通过尝试将一个简单的字符串打印回IDLE来测试它)。

我似乎遇到的最后一个问题是,当我将变量设置为不同的内容时,我的标签不会更新,即使在命令之外使用.set()也是如此。

root = tk.Tk()
root.title("Sign In Screen")

tk.Label(root,text="Username: ",font="Arial").grid(row=0,column=0)
userIDEntry = tk.Entry(root)
userIDEntry.grid(row=0,column=1)

tk.Label(root,text="Password: ",font="Arial").grid(row=1,column=0)
passwordEntry = tk.Entry(root)
passwordEntry.grid(row=1,column=1)

tk.Label(root,text="Confirm Password: ",font="Arial").grid(row=2,column=0)
passwordConfirm = tk.Entry(root)
passwordConfirm.grid(row=2,column=1)

def createAccount():
    if passwordEntry.get() == passwordConfirm.get():
        exampleFunction() #doesntwork
    else:
        var1.set("Passwords do not match!")
        root.update()

var1 = tk.StringVar()
var1.set("")
tk.Button(root,text="CREATE ACCOUNT",font="Arial",command=createAccount()).grid(row=3,column=0,columnspan=2)
tk.Label(root,textvariable=var1).grid(row=4,column=0,columnspan=2)
root.mainloop()

我希望有人可以帮助我,我正在努力教自己Tkinter并且不能停止遇到像这样的小问题。

python tkinter label
1个回答
0
投票

tkinter有一些特殊的语法(类似于线程)。你应该指定command=function而不是command=function()。这将解决您的前两个问题。事实上,在我通过一些小调整运行之后,它(我认为)可以完成你想要的更新变量!

import tkinter as tk

root = tk.Tk()
root.title("Sign In Screen")

tk.Label(root, text="Username: ", font="Arial").grid(row=0, column=0)
userIDEntry = tk.Entry(root)
userIDEntry.grid(row=0, column=1)

tk.Label(root, text="Password: ", font="Arial").grid(row=1, column=0)
passwordEntry = tk.Entry(root)
passwordEntry.grid(row=1, column=1)

tk.Label(root, text="Confirm Password: ", font="Arial").grid(row=2, column=0)
passwordConfirm = tk.Entry(root)
passwordConfirm.grid(row=2, column=1)

def createAccount():
    if passwordEntry.get() == passwordConfirm.get():
        print('thing') # your function was not included in post
    else:
        var1.set("Passwords do not match!")
        root.update()

var1 = tk.StringVar()
var1.set("")
tk.Button(root, text="CREATE ACCOUNT", font="Arial", command=createAccount).grid(row=3, column=0, columnspan=2) # removed ()
tk.Label(root, textvariable=var1).grid(row=4, column=0, columnspan=2)
root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.