Grid未按预期工作python Tkinter

时间:2014-11-28 23:19:30

标签: python tkinter grid

我正在制作一个制作棋盘布局的程序。棋盘布局之间的间距。但是最近我遇到了一个问题,它阻止网格将自己变成一个网格,所有的框架都只是在第0行和第0列。

有人可以向我解释为什么它突然开始这样做了吗?

 def fields(self):
    frame_row = 0 #Frame row value
    frame_column = 0 #Frame column value
    row_count = 0

    note_title = ""
    note_sum = ""

    for i in range(len(self.fileNames)):
        fileName = self.fileNames[i]
        fileTitle = open("Files/" + fileName, "r")
        title = fileTitle.read()
        fileTitle.close()

        note_title = title[:20]
        note_sum = title[:100]

        self.bfr2.columnconfigure(frame_column, pad=10)
        self.bfr2.rowconfigure(frame_row, pad=10)

        self.frame = Frame(self.bfr2, bg="pink", width=229, height=105, cursor="hand2", name="frame") #This is the frame widget. That si ahving problems being positioned.
        self.frame.grid(row=frame_row, column=frame_column)
        self.frame.pack_propagate(False)

        self.sum = Label(self.frame, text=note_sum.replace("\n", " "), width=32, height=5, anchor=NW, wraplength=230, justify=LEFT, name="summNote")
        self.sum.pack(side=TOP, fill=X)
        self.sum.pack_propagate(False)

        self.x = Label(self.sum, text="X", bg="red", width=2)
        self.x.pack(anchor=NE)

        self.noteName = Label(self.frame, font=("Arial", 12), text=note_title.replace("\n", ""), anchor=W, bg="grey", name="noteName")
        self.noteName.pack(side=TOP, fill=X)

        frame_column = frame_column + 1
        row_count = row_count + 1

        if row_count == 2:
            frame_row = frame_row + 1
            frame_column = 0
            row_count = 0

1 个答案:

答案 0 :(得分:2)

问题是此行中的name参数:

self.frame = Frame(self.bfr2, ..., name="frame") 

您正在创建三个框架,并为每个框架指定相同的名称。 Tkinter在内部使用此名称作为窗口小部件的名称。因此,您可以创建一个内部名称为.bfr2.frame的窗口小部件。然后,您创建下一个窗口小部件,名称为.bfr2.frame。这会导致原始窗口小部件被销毁并替换为新窗口小部件。泡沫,冲洗,重复。

每次在具有相同name参数的同一父项中创建窗口小部件时,将销毁具有相同名称的上一个窗口小部件。

如果您想使用name参数,则每个小部件必须是唯一的。