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)
之后尝试。我似乎无法弄清楚为什么代码看不到定义的函数。
答案 0 :(得分:1)
在类中定义函数时,它们被称为“方法”,它们不再属于全局范围。这意味着您无法使用doonebase
或doonexponent
。它们现在是类属性,应该这样访问。由于实例方法被赋予实例作为其第一个参数(self
),因此您可以使用它来获取属性。因此,将doonebase
更改为self.doonebase
,将dooneexponent
更改为self.dooneexponent
,将getresult
更改为self.getresult