Python 3 个 tkinter。如何修复此 Tcl 网格错误?
Python 3 tkinter. How can I fix this Tcl grid error?
Class 中有一行代码导致了问题。当我将其注释掉时,没有错误。我写的那行代码试图 grid() a tk.Label。这在 Tkinter 中没有什么特别的,事实上它在 class 中也没有什么特别的。在尝试将此 tk.Label 网格化之前,我已经网格化了许多其他 tk.Button 的(数量可变)错误说:
_tkinter.TclError: 无法在内部使用几何管理器网格。已经有 pack
管理的奴隶
如果我在那个 class 中使用 pack,这会很有意义,但我没有。
我已经尝试删除和添加这一行,并从代码的其他部分删除包,但是这个错误仍然存在。
电路板 class 已从 board.py 导入到同一文件夹中的另一个文件中。这是工作代码,请不要太担心。
另外,请不要对我的编码习惯吹毛求疵:
'''class 主页(tk.Frame):
def __init__(self, parent, controller, rows):
tk.Frame.__init__(self,parent)
self.rows = rows.get()
self.board = Board(self.rows)
home_page_button = tk.Button(self, text = "Home", command = lambda: controller.show_frame(Home))
home_page_button.grid(row=11, column = 0, columnspan = 3)
self.board_of_buttons = []
self.ice_img = tk.PhotoImage(file="ice.gif")
self.boulder_img = tk.PhotoImage(file="boulder.gif")
for i in range(self.rows):
n = []
for j in range(self.rows):
n.append(tk.Button(self, image = self.ice_img, command = lambda x=i, y=j: self.change_mode(x,y,self.ice_img)))
self.board_of_buttons.append(n)
for i in range(self.rows):
for j in range(self.rows):
self.board_of_buttons[j][i].grid(row = i, column = j)
self.is_possible = tk.StringVar()
self.is_possible.set(self.get_is_possible())
self.is_possible_label = tk.Label(textvariable = self.is_possible)
self.is_possible_label.grid(row = self.rows + 1, column = 0, columnspan=self.rows) ###### <--- This is the line of code that causes the error. When I add it: error. When I take it away: Works
def change_mode(self,row,column,image):
self.change_image(row,column,image)
self.board.board[column][row].change_type()
def change_image(self, row, column, image):
if image == self.ice_img:
self.board_of_buttons[row][column] = tk.Button(self, image = self.boulder_img, command = lambda: self.change_mode(row,column,self.boulder_img))
self.board_of_buttons[row][column].grid(row = column, column = row)
else:
self.board_of_buttons[row][column] = tk.Button(self, image = self.ice_img, command = lambda: self.change_mode(row,column,self.ice_img))
self.board_of_buttons[row][column].grid(row = column, column = row)
def get_is_possible(self):
self.board.nodeify()
p = self.board.check_linkage()
self.board.switch_the_switches(p)
if self.board.is_possible():
return 'It is possible'
else:
return "It is not possible"
'''
感谢您的帮助
您没有将父项 self
传递给标签
尝试:
self.is_possible_label = tk.Label(self, textvariable = self.is_possible)
Class 中有一行代码导致了问题。当我将其注释掉时,没有错误。我写的那行代码试图 grid() a tk.Label。这在 Tkinter 中没有什么特别的,事实上它在 class 中也没有什么特别的。在尝试将此 tk.Label 网格化之前,我已经网格化了许多其他 tk.Button 的(数量可变)错误说:
_tkinter.TclError: 无法在内部使用几何管理器网格。已经有 pack
管理的奴隶如果我在那个 class 中使用 pack,这会很有意义,但我没有。
我已经尝试删除和添加这一行,并从代码的其他部分删除包,但是这个错误仍然存在。
电路板 class 已从 board.py 导入到同一文件夹中的另一个文件中。这是工作代码,请不要太担心。
另外,请不要对我的编码习惯吹毛求疵:
'''class 主页(tk.Frame):
def __init__(self, parent, controller, rows):
tk.Frame.__init__(self,parent)
self.rows = rows.get()
self.board = Board(self.rows)
home_page_button = tk.Button(self, text = "Home", command = lambda: controller.show_frame(Home))
home_page_button.grid(row=11, column = 0, columnspan = 3)
self.board_of_buttons = []
self.ice_img = tk.PhotoImage(file="ice.gif")
self.boulder_img = tk.PhotoImage(file="boulder.gif")
for i in range(self.rows):
n = []
for j in range(self.rows):
n.append(tk.Button(self, image = self.ice_img, command = lambda x=i, y=j: self.change_mode(x,y,self.ice_img)))
self.board_of_buttons.append(n)
for i in range(self.rows):
for j in range(self.rows):
self.board_of_buttons[j][i].grid(row = i, column = j)
self.is_possible = tk.StringVar()
self.is_possible.set(self.get_is_possible())
self.is_possible_label = tk.Label(textvariable = self.is_possible)
self.is_possible_label.grid(row = self.rows + 1, column = 0, columnspan=self.rows) ###### <--- This is the line of code that causes the error. When I add it: error. When I take it away: Works
def change_mode(self,row,column,image):
self.change_image(row,column,image)
self.board.board[column][row].change_type()
def change_image(self, row, column, image):
if image == self.ice_img:
self.board_of_buttons[row][column] = tk.Button(self, image = self.boulder_img, command = lambda: self.change_mode(row,column,self.boulder_img))
self.board_of_buttons[row][column].grid(row = column, column = row)
else:
self.board_of_buttons[row][column] = tk.Button(self, image = self.ice_img, command = lambda: self.change_mode(row,column,self.ice_img))
self.board_of_buttons[row][column].grid(row = column, column = row)
def get_is_possible(self):
self.board.nodeify()
p = self.board.check_linkage()
self.board.switch_the_switches(p)
if self.board.is_possible():
return 'It is possible'
else:
return "It is not possible"
'''
感谢您的帮助
您没有将父项 self
传递给标签
尝试:
self.is_possible_label = tk.Label(self, textvariable = self.is_possible)