Ограничить ширину столбца - PullRequest
0 голосов
/ 15 мая 2019

С кодом ниже, столбцы расширяются до ширины самого широкого элемента. Как я могу ограничить ширину, скажем, 20 символов?

    def populate_using_tkinter(frame, project_list):
        label_Name_column = Tkinter.Label(frame, text="Name",  anchor="w", borderwidth=1 relief="solid")
        label_Detail_column = Tkinter.Label(frame, text="Detail", borderwidth=1, relief="solid")
        label_Name_column.grid(row=0, column=3, sticky=("W", "E"))
        label_Detail_column.grid(row=0, column=4, sticky=("W", "E"))

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вообще говоря, диспетчер геометрии grid не позволяет вам установить максимальный размер столбца. Это разработано, чтобы сжаться или расти, чтобы точно соответствовать его содержанию.

Одним из решений является использование рамок для столбцов, затем вы можете настроить рамку так, чтобы она оставалась определенной ширины. Основным недостатком этого решения является то, что у вас больше нет сетки как таковой - у вас есть ряд столбцов. Если элементы в столбцах имеют разную высоту, очень сложно выстроить ряды в ряд.

Более простое решение - убедиться, что предпочтительная ширина всех виджетов меньше требуемого размера столбца. Затем вы можете установить размер столбца и развернуть виджеты для заполнения. Когда вы сделаете это, они будут расширяться только до размера столбца, а не до их максимального размера.

Вот простой пример с двумя столбцами, где второй столбец ограничен до 100 пикселей. Это делается путем установки minsize столбца и weight нуля, а затем создания виджета метки, который меньше minsize. При установке виджета по бокам столбца он будет иметь ширину 100 пикселей.

import tkinter as tk

root = tk.Tk()
root.geometry("300x100")

# We want to constrain the column to 100 pixels, so we
# set a minsize and a weight of zero so that it will
# not grow any larger. 
root.columnconfigure(1, minsize=100, weight=0)

# Add two labels. For the label in the second column we will
# force its size to be as small as possible. Later, we will
# configure it to grow to fill its column
label1 = tk.Label(root, text="This is a wide label", background="pink")
label2 = tk.Label(root, anchor="w", width=1, text="This is also a wide label", background="bisque")

# Add the labels, and configure them to fill their columns
label1.grid(row=0, column=0, sticky="nsew")
label2.grid(row=0, column=1, sticky="nsew")

root.mainloop()

screenshot

1 голос
/ 15 мая 2019

Вот пример с grid_propagate, который должен достаточно хорошо показать, как он влияет на контейнер.Здесь мы используем 2 кадра и 2 кнопки.С помощью кнопок легче показать, как расширяется каждый виджет и контейнер, а также показать, как можно зафиксировать размер кадра.

Имейте в виду, что каждый кадр имеет ширину и высоту в пикселях.Виджеты настроены как длина и высота символов, поэтому на них влияет форматирование шрифта, но нам не нужно показывать это в этом примере.

Дайте мне знать, если у вас есть какие-либо вопросы.

import tkinter as tk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.columnconfigure(1, weight=1)

        left_frame = tk.Frame(self, width=200, height=200)
        left_frame.grid(row=0, column=0)
        left_frame.rowconfigure(0, weight=1)
        left_frame.columnconfigure(0, weight=1)
        left_frame.grid_propagate(False)

        right_frame = tk.Frame(self)
        right_frame.grid(row=0, column=1, sticky='nsew')
        right_frame.rowconfigure(0, weight=1)
        right_frame.columnconfigure(0, weight=1)

        tk.Button(left_frame, text='test left frame').grid(row=0, column=0, sticky='nsew')
        tk.Button(right_frame, text='test right frame').grid(row=0, column=0, sticky='nsew')


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