首页 > 解决方案 > 如何修复 python tkinter StringVar 的这个错误?

问题描述

所以基本上我要编写一个 python tkinter 程序来显示重量,但是变量和对象让我分心。

我的代码是这样的:

from tkinter import *
import tkinter as tk

#object oriented BMI project
class Root(Tk):
    def __init__(self): 
        super(Root, self).__init__()


        #Info Bar
        self.title("Shushu BMI Calculator")
        self.geometry("1100x600")
        #self.resizable("False")
    
        #var
        self.weight = tk.StringVar()
        #self.w = tk.StringVar()

        #Caption
        self.caption = tk.Label(text = "BMI Calculator - Beta 2.0",
                             fg = "brown",
                             font="Arial 40")
        self.caption.grid(column = 0, row = 0, sticky = "N")

        #Copyright
        self.copyright = tk.Label(text = "Powered by Shushu Studio",
                                   fg = "green",
                                   font = "Arial 20")
        self.copyright.grid(column = 1, row = 0, sticky = "E")
    
        #Weight input Row
        self.weightInputTag = tk.Label(text="Please input your weight here (kg)")
        self.weightInputTag.grid(column = 0, row = 1, sticky = "W")

        self.weightEntry = tk.Entry(textvariable = self.weight)
        self.weightEntry.grid(column = 0, row = 1)
    
        self.weightSubmit = tk.Button(text="Submit",
                                     COMMAND=self.weightget)
        self.weightSubmit.grid(column = 0, row = 2)

        self.showWeight = tk.Label(text="")
        self.showWeight.grid(column = 0, row = 3)

        def weightget(self):
            weight = self.weightEntry.get()
            self.showWeight.configure(text=weight)


root = Root()
root.mainloop()

控制台显示:

Resetting Python state.
Running P:\2020\09\25\bmi.py
The interactive Python process has exited.
Traceback (most recent call last):
  File "P:\2020\09\25\bmi.py", line 52, in <module>
    root = Root()
  File "P:\2020\09\25\bmi.py", line 41, in __init__
    COMMAND=self.weightget)
  File "P:\Language\lib\tkinter\__init__.py", line 2345, in __getattr__
    return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'weightget'

请帮忙,非常感谢!

标签: pythontkinter

解决方案


你的函数的缩进是错误的。

def weightget(self):
    weight = self.weightEntry.get()
    self.showWeight.configure(text=weight)

如果您希望此函数作为类方法而不是作为类本地命名空间中的普通函数工作。我假设,既然你把参数放在函数中,那么你需要通过indentationself确保它在正确的位置。

import tkinter as tk
class Root(tk.Tk):
    def __init__(self): 
        super(Root, self).__init__()


        #Info Bar
        self.title("Shushu BMI Calculator")
        self.geometry("1100x600")
        #self.resizable("False")
    
        #var
        self.weight = tk.StringVar()
        #self.w = tk.StringVar()

        #Caption
        self.caption = tk.Label(text = "BMI Calculator - Beta 2.0",
                             fg = "brown",
                             font="Arial 40")
        self.caption.grid(column = 0, row = 0, sticky = "N")

        #Copyright
        self.copyright = tk.Label(text = "Powered by Shushu Studio",
                                   fg = "green",
                                   font = "Arial 20")
        self.copyright.grid(column = 1, row = 0, sticky = "E")
    
        #Weight input Row
        self.weightInputTag = tk.Label(text="Please input your weight here (kg)")
        self.weightInputTag.grid(column = 0, row = 1, sticky = "W")

        self.weightEntry = tk.Entry(textvariable = self.weight)
        self.weightEntry.grid(column = 0, row = 1)
    
        self.weightSubmit = tk.Button(self,text="Submit",
                                      command=self.weightget)
        self.weightSubmit.grid(column = 0, row = 2)

        self.showWeight = tk.Label(text="")
        self.showWeight.grid(column = 0, row = 3)

    def weightget(self):
        weight = self.weightEntry.get()
        self.showWeight.configure(text=weight)


root = Root()
root.mainloop()

推荐阅读