首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tkinter程序中修复AttributeError

如何在tkinter程序中修复AttributeError
EN

Stack Overflow用户
提问于 2017-10-16 03:47:13
回答 2查看 569关注 0票数 0

所以我对编程非常陌生,我正在努力想出我的第一个tkinter程序。它利用thebioneer.com中的一个公式来计算一个人的“功率水平”(想想DBZ)。然而,每当我运行它时,我都会得到"AttributeError:'_tkinter.tkapp‘对象没有属性'entry3’,并且我也找不出出了什么问题。

代码语言:javascript
复制
import tkinter

class powerapp_tk(tkinter.Tk):
    def __init__(self,parent):
        tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()

        label = tkinter.Label(self, text="Enter Back Squat 1 Rep Max")
        label.grid(column=0,row=0,columnspan=2,sticky='EW')
        entry1 = tkinter.Entry(self)
        entry1.grid(column=0,row=1,sticky='EW')
        label2 = tkinter.Label(self, text="Enter Bench Press 1 Rep Max")
        label2.grid(column=0,row=2,columnspan=2, sticky='EW')
        entry2 = tkinter.Entry(self)
        entry2.grid(column=0,row=3,sticky='EW')
        label3 = tkinter.Label(self, text="Enter Max KM Covered in 12 min")
        label3.grid(column=0,row=4,columnspan=2,sticky='EW')
        entry3 = tkinter.Entry(self)
        entry3.grid(column=0,row=5,sticky='EW')
        label4 = tkinter.Label(self, text="Enter Max Pull Ups With Perfect Form")
        label4.grid(column=0,row=6,columnspan=2,sticky='EW')
        entry4 = tkinter.Entry(self)
        entry4.grid(column=0,row=7,sticky='EW')
        label5 = tkinter.Label(self, text="Enter Standing Vertical Jump in CM")
        label5.grid(column=0,row=8,columnspan=2,sticky='EW')
        entry5 = tkinter.Entry(self)
        entry5.grid(column=0,row=9,sticky='EW')
        label6 = tkinter.Label(self, text="Enter Max One Legged Tennis Ball Catch")
        label6.grid(column=0,row=10,columnspan=2,sticky='EW')
        entry6 = tkinter.Entry(self)
        entry6.grid(column=0,row=11,sticky='EW')
        label7 = tkinter.Label(self, text="Enter IQ Score")
        label7.grid(column=0,row=12,columnspan=2,sticky='EW')
        entry7 = tkinter.Entry(self)
        entry7.grid(column=0,row=13,sticky='EW')
        button = tkinter.Button(self, text=u"Calculate", command=self.calcpower)
        button.grid(column=0,row=14)

        self.grid_columnconfigure(0,weight=2)
        self.minsize(width=400, height=400)
        self.resizable(True, False)
        self.update()
        self.geometry(self.geometry())


    def calcpower(self):
        h = entry3.get() * 100
        i = entry4.get() * 5
        j = entry5.get() * 15
        k = entry6.get() * 8
        l = entry7.get() * 2.5
        powerlevel = int(a)+int(b)+int(h)+int(i)+int(j)+int(k)+int(l)
        print('Your power level is: ' + str(powerlevel))

if __name__=="__main__":
    app = powerapp_tk(None)
    app.title('Power App')
    app.mainloop()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-16 04:04:47

我不得不移动一些东西,而您的代码还有一些其他问题,但这将使您的工作更加深入。基本上,该程序没有实现您的entry3应用于不同的功能。其他选择是将其声明为全局的,但是self.entry#是一个更好的解决方案。

代码语言:javascript
复制
import tkinter

class powerapp_tk(tkinter.Tk):
    def __init__(self,parent):
        tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def calcpower(self):
        h = self.entry3.get() * 100
        i = self.entry4.get() * 5
        j = self.entry5.get() * 15
        k = self.entry6.get() * 8
        l = float(self.entry7.get()) * 2.5
        powerlevel = int(h) + int(i) + int(j) + int(k) + int(l)
        print('Your power level is: ' + str(powerlevel))

    def initialize(self):

        self.grid()

        label = tkinter.Label(self, text="Enter Back Squat 1 Rep Max")
        label.grid(column=0,row=0,columnspan=2,sticky='EW')
        entry1 = tkinter.Entry(self)
        entry1.grid(column=0,row=1,sticky='EW')
        label2 = tkinter.Label(self, text="Enter Bench Press 1 Rep Max")
        label2.grid(column=0,row=2,columnspan=2, sticky='EW')
        entry2 = tkinter.Entry(self)
        entry2.grid(column=0,row=3,sticky='EW')
        label3 = tkinter.Label(self, text="Enter Max KM Covered in 12 min")
        label3.grid(column=0,row=4,columnspan=2,sticky='EW')
        self.entry3 = tkinter.Entry(self)
        self.entry3.grid(column=0,row=5,sticky='EW')
        label4 = tkinter.Label(self, text="Enter Max Pull Ups With Perfect Form")
        label4.grid(column=0,row=6,columnspan=2,sticky='EW')
        self.entry4 = tkinter.Entry(self)
        self.entry4.grid(column=0,row=7,sticky='EW')
        label5 = tkinter.Label(self, text="Enter Standing Vertical Jump in CM")
        label5.grid(column=0,row=8,columnspan=2,sticky='EW')
        self.entry5 = tkinter.Entry(self)
        self.entry5.grid(column=0,row=9,sticky='EW')
        label6 = tkinter.Label(self, text="Enter Max One Legged Tennis Ball Catch")
        label6.grid(column=0,row=10,columnspan=2,sticky='EW')
        self.entry6 = tkinter.Entry(self)
        self.entry6.grid(column=0,row=11,sticky='EW')
        label7 = tkinter.Label(self, text="Enter IQ Score")
        label7.grid(column=0,row=12,columnspan=2,sticky='EW')
        self.entry7 = tkinter.Entry(self)
        self.entry7.grid(column=0,row=13,sticky='EW')
        button = tkinter.Button(self, text=u"Calculate", command=self.calcpower)
        button.grid(column=0,row=14)

        self.grid_columnconfigure(0,weight=2)
        self.minsize(width=400, height=400)
        self.resizable(True, False)
        self.update()
        self.geometry(self.geometry())


if __name__=="__main__":
    app = powerapp_tk(None)
    app.title('Power App')
    app.mainloop()
票数 1
EN

Stack Overflow用户

发布于 2017-10-16 04:02:21

请在所有输入字段中添加“自我前缀”。不要使用entry3,而是使用self.entry3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46762645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档