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)
。我似乎无法弄清楚为什么代码看不到已定义的函数。
当您在类中定义函数时,它们称为“方法”,它们不再位于全局范围内。这意味着您不能使用doonebase
或doonexponent
。现在,它们是类属性,应该这样访问。由于实例方法是将实例作为其第一个参数(self
)给出的,因此可以使用它来获取属性。因此,改变doonebase
对self.doonebase
,dooneexponent
对self.dooneexponent
,并getresult
以self.getresult
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句