我正在制作一个制作棋盘布局的程序。棋盘布局之间的间距。但是最近我遇到了一个问题,它阻止网格将自己变成一个网格,所有的框架都只是在第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
答案 0 :(得分:2)
问题是此行中的name
参数:
self.frame = Frame(self.bfr2, ..., name="frame")
您正在创建三个框架,并为每个框架指定相同的名称。 Tkinter在内部使用此名称作为窗口小部件的名称。因此,您可以创建一个内部名称为.bfr2.frame
的窗口小部件。然后,您创建下一个窗口小部件,名称为.bfr2.frame
。这会导致原始窗口小部件被销毁并替换为新窗口小部件。泡沫,冲洗,重复。
每次在具有相同name
参数的同一父项中创建窗口小部件时,将销毁具有相同名称的上一个窗口小部件。
如果您想使用name
参数,则每个小部件必须是唯一的。