我正在尝试执行与此处用户类似的操作:Aligning widgets using grid between multiple Tkinter LabelFrames
我想将以红色和蓝色突出显示的标签窗口小部件与其下方框架中的文本窗口小部件网格对齐。即使我将每个小部件的宽度指定为相同的字符数,并且对标签和文本框使用相同的tkFont,也无法使它们的像素宽度相同。我听说您可以使用grid_columnconfigure来执行此操作,但是我看不到唯一的参数是 minsize , pad 和 weight 。我也尝试过使用pack_propagate,但无所适从使其无所不能。有什么方法可以对齐网格在不同框架中的列或指定标签窗口小部件的确切宽度(以像素为单位)?
我以前编写代码的方式是,标签与文本框在同一框架中的同一网格中,这可以避免此问题,但可以解决此问题,从而使向下滚动时标签不可见。无论您要查看网格的哪个部分,我都希望标签可见,但是我希望它们仍与网格相对应,以提高可读性。
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.currRow = -1
self.currCol = -1
self.width = 1100
self.height = 200
self.topWin = Frame(root)
self.topWin.pack(side=TOP)
self.baseWin = Frame(root)
self.baseWin.pack()
self.headerWin = Frame(self.baseWin)
self.headerWin.pack(side=TOP)
self.leftWin = Frame(self.baseWin)
self.leftWin.pack(side=LEFT)
self.canvas = Canvas(self.leftWin, width=1050, height=200)
self.bottomWin = Frame(self.canvas)
self.canvas.pack(fill="both", expand=True)
self.canvas.create_window(self.width/2, 50, window=self.bottomWin)
self.scrollbar = Scrollbar(self.baseWin, orient="vertical", command=self.canvas.yview)
self.scrollbar.pack(side="right", fill="y")
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.bottomWin.bind("<Configure>", self.onFrameConfigure)
self.font = tkFont.Font(root=self.bottomWin, family="Helvetica", size=10,
weight="bold")
self.headerFont = tkFont.Font(root=self.bottomWin, family="Helvetica",
size=10, weight="bold")
self.displayMode = "all"
self.filterEstimates = False
self.filterBids = False
self.filterContact = False
self.filterRenewal = False
self.init_window()
self.loadJobs()
def onFrameConfigure(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def printColumnHeaders(self):
j = 0
bg = "blue"
for header in self.headers:
if j % 2 == 0:
bg = "blue"
else:
bg = "red"
label = Label(self.headerWin, text=header, font=self.headerFont, width=12, anchor="w", bg=bg)
label.grid(row=0, column=j, sticky="WE")
if j == 0:
label.grid_columnconfigure(j, minsize=50)
j = j + 1