【问题标题】:Error: "missing 5 required positional arguments" In Python, Tkinter错误:“缺少 5 个必需的位置参数”在 Python 中,Tkinter
【发布时间】:2017-05-20 04:42:20
【问题描述】:

具体错误是:

_getandcreate() 缺少 5 个必需的位置参数:“_get_userpass”、“_createuser”、“t”、“用户名”和“密码”

有问题的子程序:

def create_regwindow(self):
    t = tk.Toplevel(self)
    t.wm_title("Register")
    t.entry_user = tk.Entry(t)
    t.entry_pass = tk.Entry(t, show="*")
    t.title = tk.Label(t, text="Enter your new username and password below")
    t.field_user = tk.Label(t, text="Username")
    t.field_pass = tk.Label(t, text="Password")
    t.regbutton = tk.Button(t, text="Create Account", command=self._getandcreate) <-- HERE
    t.title.grid(row=0, sticky=tk.E)
    t.title.grid(row=0, column=1)
    t.field_user.grid(row=1, sticky=tk.E)
    t.field_pass.grid(row=2, sticky=tk.E)
    t.entry_user.grid(row=1, column=1)
    t.entry_pass.grid(row=2, column=1)
    t.regbutton.grid(row=3, column=1)

这里是实际的子程序:

def _getandcreate(self, _get_userpass, _createuser, t, username, password):
    _get_userpass(t)
    _createuser(username, password)

我需要将它们变量传递到第一个代码块(标记为 HERE)中的命令中,但是,当我这样做时,我需要将这些变量放入我的代码的一部分中(在 init,整个代码在底部) - 导致它们没有被定义的问题。

我有点困惑。目的是,当用户点击“创建帐户”时,用户输入的数据被获取并添加到我的数据库中。

【问题讨论】:

    标签: python oop tkinter


    【解决方案1】:

    回调系统无法知道您的所有参数。你可以把你的电话放在lambda

    t.regbutton = tk.Button(t, text="Create Account", command=self._getandcreate)
    

    会变成

    t.regbutton = tk.Button(t, text="Create Account", command=lambda : self._getandcreate(t,<needed args>))
    

    但这里有更好的做法,因为您只处理对象成员(方法或数据)。

    像这样声明_getandcreate_get_userpass 方法:

    def _getandcreate(self):
        username, password = self._get_userpass()
        self._createuser(username, password)
    
    def _get_userpass(self):
        t = self.__toplevel
        username = t.entry_user.get()
        password = t.entry_pass.get()
        return username, password
    

    并在create_regwindow 中设置self.__toplevel

    def create_regwindow(self):
        t = tk.Toplevel(self)
        self.__toplevel = t
    

    【讨论】:

    • 看我的回答:你也必须改变get_userpass。删除t参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多