[英]GUI Python Login Error: Missing an Argument
我在尝试进行此 GUI 登录时遇到问题。 这是代码:
from tkinter import *
class OneBiggerWindow():
def __init__(self, master):
self.master = master
master.label_usr = Label(text = 'Enter Username')
master.label_usr.pack()
master.entry_usr = Entry(master)
master.entry_usr.pack()
master.label_pswrd = Label(text = 'Enter Password')
master.label_pswrd.pack()
master.entry_pswrd = Entry(master)
master.entry_pswrd.pack(padx = 15)
master.submit = Button(text = 'Submit', command = self.Pswrd_Chkr)
master.submit.pack(pady = 10)
def Pswrd_Chkr(self, master):
username = master.entry_pswrd.get()
password = master.entry_usr.get()
if username == 'BigBoy' and password == 55595:
print('You got it')
else:
print('Boohoo, you are incorrect')
root = Tk()
GuiBoi = OneBiggerWindow(root)
root.mainloop()
所以小窗口打开,我输入用户名和密码,我只是收到这个错误:
File "C:\Users\MyName\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: Pswrd_Chkr() missing 1 required positional argument: 'master'
我不知道如何解决这个问题。 任何帮助将非常感激! 非常感谢,节日快乐!
由于您使用 OOP 作为开发用户界面的范例,您应该充分利用它提供的所有好处。 但是,有些事情告诉我您不太熟悉类、对象、实例变量和其他 OOP 概念。
我建议您将您的类设计为实际继承自tkinter.Tk
,因为用户界面部分(小部件)的状态和行为被分组到单独的对象中,这些对象依次位于单独的命名空间中。
除此之外,我还建议您摆脱from tkinter import *
,因为您不知道导入的名称。 它可以替换您之前导入的名称,并且很难查看程序中的名称应该来自哪里。 改用import tkinter as tk
,这是 Python 中的一种习惯用法。
您可能想阅读 PEP8 在命名约定、关键字参数周围的空格以及 Python 编码风格指南方面的内容:
您在代码中还有其他小问题——例如,您在两种不同数据类型之间进行对象相等性检查、小错别字等。
无论如何,这是我的看法,您可以稍微重写上面的代码:
import tkinter as tk
class Application(tk.Tk):
def __init__(self):
super().__init__()
self._create_widgets()
def _create_widgets(self):
"""
Creating all root window widgets and configuring them properly
"""
label_usr = tk.Label(text='Enter Username')
label_usr.pack()
self.entry_usr = tk.Entry(self)
self.entry_usr.pack()
label_pswrd = tk.Label(self, text='Enter Password')
label_pswrd.pack()
self.entry_pswrd = tk.Entry(self)
self.entry_pswrd.pack(padx=15)
submit = tk.Button(text='Submit', command=self.pswrd_chkr)
submit.pack(pady=10)
def pswrd_chkr(self):
username = self.entry_usr.get()
password = self.entry_pswrd.get()
print(
'You got it!'
if username == 'BigBoy' and int(password) == 55595
else 'Boohoo, you are incorrect'
)
if __name__ == '__main__':
app = Application()
app.mainloop()
当您解决上述问题时,有几个快速建议:您可以通过提供一个按钮来在输入用户凭据后清除输入框,或者更好地 - 使其自动清除这两个字段,从而稍微改善用户体验。 此外,密码字段可以隐藏您实际键入的字符。
一个长期明智的建议:你需要赶上你的 OOP! :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.