【问题标题】:Passing a variable - Python传递变量 - Python
【发布时间】:2017-06-26 18:10:28
【问题描述】:

我试图弄清楚为什么我不能将一个变量从一个小部件条目传递给一个变量,该变量意味着一个对象类中的用户名。

正如所写,它会引发以下错误:TypeError: enter() missing 1 required positional argument: 'self'

class User:
    'a class to define users'
    def __init__(self, username, goal, contra, gender, weight):
        self.username = username
        self.goal = goal
        self.contra = contra
        self.gender = gender
        self.weight = weight

'Adds date and current weight to an array to track progress'
    #def weighIn[date, weight]:
    def setUser(self, username):
        self.username = string
def enter(self):
    global e1
    global string
    string = e1.get() 
    setUser()

namescreen = Tk.Tk()
namescreen.title("Current Exercise")

var = StringVar()
label = Label( namescreen, textvariable=var)
var.set("Hi! What is your name?")
label.pack()
usr = StringVar()
e1 = Entry(namescreen, textvariable=usr)
e1.pack()
b1 = tkinter.Button(namescreen, text ="Enter", command =enter)
b1.pack()


namescreen.bind('<Return>', enter)
namescreen.mainloop()

我也尝试添加 newUser = User.init(self, "Default"...) 它告诉我 self 没有定义。我不确定我做错了什么。

【问题讨论】:

  • 看起来像一个缩进错误,这使得 enter 成为一个函数,而不是你对象的一个​​方法。
  • @Thomas 我的回答对你有用吗?

标签: python class constructor


【解决方案1】:

首先,在您的enter 函数中,如果没有User 类的实例,您不能调用setUser(),因为它是一个成员函数。

其次,您应该将enter 函数包含为User 类的成员函数。然后你需要创建一个 User 对象并将按钮绑定到User.event 而不仅仅是event

此代码将正常运行。

import Tkinter as Tk

class User:
    'a class to define users'
    def __init__(self, username, goal, contra, gender, weight):
        self.username = username
        self.goal = goal
        self.contra = contra
        self.gender = gender
        self.weight = weight

    'Adds date and current weight to an array to track progress'
    #def weighIn[date, weight]:
    def setUser(self, username):
        self.username = string
        print('Username is {}'.format(self.username))
    def enter(self):
        global e1
        global string
        string = e1.get() 
        self.setUser(string)

namescreen = Tk.Tk()
namescreen.title("Current Exercise")

user = User('','','','','')

var = Tk.StringVar()
label = Tk.Label( namescreen, textvariable=var)
var.set("Hi! What is your name?")
label.pack()
usr = Tk.StringVar()
e1 = Tk.Entry(namescreen, textvariable=usr)
e1.pack()
b1 = Tk.Button(namescreen, text ="Enter", command =user.enter)
b1.pack()


namescreen.bind('<Return>', user.enter)
namescreen.mainloop()

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2021-04-16
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多