Я пытаюсь сделать что-то похожее на то, что делал пользователь: Выравнивание виджетов с использованием сетки между несколькими Tkinter LabelFrames
Я хочу выровнять виджеты меток, выделенные красным и синимс сеткой текстовых виджетов в рамке под ним.Даже если я укажу ширину каждого виджета как одинаковое количество символов и использую один и тот же tkFont для надписей и текстовых полей, я не могу сделать так, чтобы они имели одинаковую ширину в пикселях, как вы можете видеть.Я слышал, что вы можете использовать grid_columnconfigure для этого, но я не вижу, как единственными параметрами являются minsize , pad и weight .Я также пытался использовать pack_propagate, но затрудняюсь заставить его что-либо делать.Есть ли способ выровнять столбцы сетки в разных кадрах или указать точную ширину в пикселях виджета метки?
Способ IРанее мой код был там, где метки были частью той же сетки в том же фрейме, что и текстовые поля, что устраняет проблему, но делает так, чтобы метки не были видны при прокрутке вниз.Я хочу, чтобы метки были видны независимо от того, в какой части сетки вы просматриваете, но я хочу, чтобы они по-прежнему совпадали с панелью для удобства чтения.
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