所以我在tkinter做了一个刽子手游戏,我按下时按下按钮消失,按下重启按钮后重新出现。我还在学习编码,并试图调整它以包含类以使代码更清晰。这是我用来创建按钮小部件的代码:
class Buttons:
def __init__(self, letter, column, row):
self.letter = letter
self.column = column
self.row = row
def create(self):
column = self.column
row = self.row
letter = self.letter
self = tk.Button(window, text=self.letter, bg = colour, font=FONT,
command=lambda : check(letter))
self.place(relx=column, rely=row)
然后我按下这样的按钮,一切正常:
A = Buttons('A', column1, row1).create()
我想要做的是访问“自我”,“自我”,“自我”和“自我”栏目#39;在类定义之外,但当我尝试使用' A.letter'时,它表示该对象是Nonetype。它没有属性字母。 回溯(最近一次调用最后一次):
File "C:\Users\cameron\Documents\Python\Hangman\Hangman v2.1.py", line 227, in <module>
print(A.letter)
AttributeError: 'NoneType' object has no attribute 'letter'
有谁知道我怎么能访问这个?
谢谢
答案 0 :(得分:3)
您无需重新分配self
。试试这个:
def create(self):
#column = self.column # don't need these
#row = self.row
#letter = self.letter
self.tkbutton = tk.Button(window, text=self.letter, bg = colour, font=FONT, command=lambda : check(letter))
# Stashes the tk.Button instance away in `self.tkbutton`.
self.tkbutton.place(relx=self.column, rely=self.row)
self
始终保持不变,因此您永远不应该说self = <whatever>
。相反,请使用self.<some field name> = <whatever value>
。然后<some field name>
可以从外部访问A.<some field name>
。
然后,要使用该按钮,请尝试
A = Buttons('A', column1, row1) # calls A.__init__()
A.create()
# at this point A.tkbutton exists and is accessible.
虽然更好的方法可能是将create
的工作合并到__init__
,以便创建按钮并将其置于A=Buttons(...)
调用中。
修改您收到NoneType
错误的原因是create()
不包含return
语句。因此,其返回值为None
。因此,A=Buttons(...).create()
会返回None
,即NoneType
。