繁体   English   中英

Python 3 tkinter。 如何修复此 Tcl 网格错误?

[英]Python 3 tkinter. How can I fix this Tcl grid error?

类中有一行代码导致了问题。 当我将其注释掉时,没有错误。 我写的这行代码试图 grid() 一个 tk.Label。 这在 Tkinter 中没有什么特别之处,实际上在类中也没有什么特别之处。 在尝试对这个 tk.Label 进行网格化之前,我已经对许多其他 tk.Button 的(可变数量)进行了网格()处理,错误说:

_tkinter.TclError: 不能在内部使用几何管理器网格。 已经有由包管理的奴隶

如果我在该类中使用 pack 但我不是,这将是有意义的。

我曾尝试删除和添加此行并从代码的其他部分取出包,但是此错误仍然存​​在。

Board 类已从 board.py 导入到同一文件夹中的另一个文件中。 这是工作代码,请不要太担心。

另外请不要过多地谈论我的编码实践:

'''class MainPage(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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM