我正在创建一个用于大学工作的软件的登录页面,并且正在与Tkinter Entries进行斗争。
我想以一种整洁而有效的方式创建条目,因此选择使用函数来执行此操作,但这将消除命名变量的可能性。
我怎么能使用我所拥有的代码然后在按下登录按钮后返回'用户名'和'密码'输入字段的值?
def create_widget(self, cont, args):
if(args[0] == 'Button'):
self.create_button(cont, args)
elif(args[0] == 'Entry'):
self.create_entry(args)
elif(args[0] == 'CheckBox'):
self.create_checkbox(args)
elif(args[0] == 'Label'):
self.create_label(args)
else:
print("Invalid Argument while creating Widget")
def create_entry(self, args):
if(args[4] == True):
entry = tk.Entry(self, font=FONT, width=args[1])
entry.place(x=args[2],y=args[3])
else:
entry = tk.Entry(self, font=FONT, width=args[1], show = '*')
entry.place(x=args[2],y=args[3])
self.create_widget(controller, ["Entry", 21, 135, 30, True])
self.create_widget(controller, ["Entry", 21, 135, 60, False])
您应该让create_*
函数返回创建的对象,您可以将其存储在字典或列表中。
def create_entry(self, args):
...
entry = tk.Entry(...)
...
return entry
def create_widget(self, cont, args):
...
elif(args[0] == 'Entry'):
widget = self.create_entry(...)
...
return widget
然后你可以使用上面这样的:
widgets = {
"username": self.create_widget(...),
"password": self.create_widget(...)
}
要检索值:
username = widgets["username"].get()
password = widgets["password"].get()
下面的示例将在按下按钮时使用第二个输入字段的文本更新标签的文本:
import tkinter as tk
root = tk.Tk()
lbl = tk.Label(root, text="This text will get updated once the button is pressed")
lbl.pack()
entries = list()
num_of_entries = 3
for i in range(num_of_entries):
entries.append(tk.Entry(root))
entries[i].pack()
def update():
lbl['text'] = entries[1].get()
tk.Button(root, text="Update", command=update).pack()
root.mainloop()