我正在开发一个项目,其中一个classobject必须调用另一个类方法。 但似乎它在我的代码中不起作用。所以我的问题是,如果是的话 可能在类中创建的元素可以调用同一个类的其他方法吗? 这是我的代码:
from tkinter import *
class table():
def create_root(self):
self.root = Tk()
return self.root
def create_frame(self, master):
self.frame = Frame(master)
self.frame.pack()
return self.frame
def sidetable(self, master, lst):
for i in range(len(lst)):
self.labelside = Label(master, text=lst[i])
self.labelside.grid(row=i+1, column=0)
def toptable(self, master, lst):
for i in range(len(lst)):
self.labeltop = Label(master, text=lst[i])
self.labeltop.grid(row=0, column=i+1)
def create_button_col(self, master, x, y, posles):
def whitegreen(button, posles):
if button["bg"]=="white":
button["bg"]="green"
posles.append([lenght,hight])
else:
button.config(bg="white")
for i in range(len(posles)):
if posles[i]==[lenght,hight]:
del posles[i]
break
self.button = Button(master, bg="white")
self.button.config(command=lambda: whitegreen(self.button, posles))
self.button.grid(lenght, hight)
def tableteach(self, master, lenght, hight, posles): # I guess the problem lies somwere here...
butlst = list(range(hight*lenght))
for i in range(lenght+1, 1, 1):
for j in range(hight+1, 1, 1):
self.butlst[i*lenght+j]=table()
self.butlst[i*lenght+j].create_button_col(master, i, j, posles)
a = table()
root = a.create_root()
frame = a.create_frame(root)
frame2 = a.create_frame(root)
timelst = ["10:00", "12:00", "14:00", "16:00", "18:00"]
weekdays=["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
a.toptable(frame, weekdays)
a.sidetable(frame, timelst)
posles = []
a.tableteach(frame, len(weekdays), len(timelst), posles)
root.mainloop()
答案 0 :(得分:0)
在方法tableteach
中,您的代码首先创建一个引用列表的本地变量butlst
。
butlst = list(range(hight*lenght))
然后在for
- 循环中,您引用self.butlst
并期望它成为一个列表。
self.butlst[i*lenght+j]=table()
但你没有定义它。 butlst
是您方法的本地变量。 self.butlst
应该是table
实例的属性,但是您的代码实际上并没有在我能看到的任何地方创建它。 butlst
≠self.butlst
。