Tkinter按钮未定义

时间:2016-04-16 00:11:43

标签: python user-interface tkinter

from tkinter import *
class Mybuttons():
    def __init__(self, master):
        self.frm= Frame(master)
        self.frm.grid()
        self.count= 0
        self.mybuttons()
        self.base=0
        self.exponent=0
        self.result=0
    def doonebase(self):
        self.base+=1
        self.btn1['text']= 'the base is ' + str(self.base)
    def dooneexponent(self):
        self.exponent+=1
        self.btn2['text']= 'the base is ' + str(self.exponent)
    def getresult(self):
        self.result= self.base * self.exponent
        self.btn3['text']= 'the answer is ' + str(self.result)
    def mybuttons(self):
        self.btn1=Button(self.frm)
        self.btn1['text']='base'
        self.btn1['command']=doonebase
        self.btn2=Button(self.frm)
        self.btn2['text']='exponent'
        self.btn2['command']=dooneexponent
        self.btn3=Button(self.frm)
        self.btn3['text']='result'
        self.btn3['command']=getresult
        self.btn1.grid(row=0, column=0)
        self.btn2.grid(row=0, column=2)
        self.btn3.grid(row=1, column=1)

def try1():
        root= Tk()
        root.title('Compute an exponent!')
        root.geometry("200x300")
        threebuttons= Mybuttons(root)
        root.mainloop()
try1()    

当我运行时,我收到错误:

File "/home/goofy/Documents/lab10-1.py", line 23, in mybuttons
    self.btn1['command']=doonebase
NameError: name 'doonebase' is not defined

它会生成一个窗口,但按钮不存在。

当我注释掉为命令分配“命令”的每一行时,代码会运行,并且按钮会出现,但它们不会执行任何操作。我曾尝试在构造函数之前定义每个函数,并在def mybuttons(self)之后尝试。我似乎无法弄清楚为什么代码看不到定义的函数。

1 个答案:

答案 0 :(得分:1)

在类中定义函数时,它们被称为“方法”,它们不再属于全局范围。这意味着您无法使用doonebasedoonexponent。它们现在是类属性,应该这样访问。由于实例方法被赋予实例作为其第一个参数(self),因此您可以使用它来获取属性。因此,将doonebase更改为self.doonebase,将dooneexponent更改为self.dooneexponent,将getresult更改为self.getresult