Выравнивание сеток Tkinter на отдельных кадрах - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь сделать что-то похожее на то, что делал пользователь: Выравнивание виджетов с использованием сетки между несколькими Tkinter LabelFrames

Я хочу выровнять виджеты меток, выделенные красным и синимс сеткой текстовых виджетов в рамке под ним.Даже если я укажу ширину каждого виджета как одинаковое количество символов и использую один и тот же tkFont для надписей и текстовых полей, я не могу сделать так, чтобы они имели одинаковую ширину в пикселях, как вы можете видеть.Я слышал, что вы можете использовать grid_columnconfigure для этого, но я не вижу, как единственными параметрами являются minsize , pad и weight .Я также пытался использовать pack_propagate, но затрудняюсь заставить его что-либо делать.Есть ли способ выровнять столбцы сетки в разных кадрах или указать точную ширину в пикселях виджета метки?

enter image description here

Способ 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

1 Ответ

0 голосов
/ 03 октября 2018

Я уже решил это с помощью , сделав список из нескольких столбцов .Скопируйте этот код и запустите его;Второй пример - именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...