.grid () не центрирует мой виджет по умолчанию в Tkinter (Python) - PullRequest
0 голосов
/ 30 сентября 2018
from tkinter import *
root = Tk()

equa = ""
equation = StringVar()

calculation = Label(root, textvariable = equation)

equation.set("23 + 54")

calculation.grid(columnspan = 4)

def btnPress(num):
    global equa
    equa = equa + str(num)
    equation.set(equa)

Button0 = Button(root, text = "0", command = lambda:btnPress(0))
Button0.grid(row = 1, column = 0)

Button1 = Button(root, text = "1", command = lambda:btnPress(1))
Button1.grid(row = 1, column = 1)

Button2 = Button(root, text = "2", command = lambda:btnPress(3))
Button2.grid(row = 1, column = 2)

root.mainloop()

Всякий раз, когда я запускаю свой код, .grid () не центрирует мои кнопки автоматически.Я читал, что .grid () предполагает автоматическое центрирование виджетов, но я не уверен, что я что-то не так делаю.

1 Ответ

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

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

Строки и столбцы имеют атрибут weight, который указывает grid, как использовать дополнительное пространство.Дополнительное пространство дается каждой строке и / или столбцу с положительным весом.вес пропорционален, поэтому столбец с весом 2 получит вдвое больше дополнительного пространства, чем столбец с весом 1.

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

Вы задаете вес столбцов с помощью метода columnconfigure главного виджета.В вашем случае это корневое окно.

Примеры

Чтобы кнопки были равномерно расположены, добавьте следующие строки кода:

root.grid_columnconfigure((0, 1, 2), weight=1)

enter image description here

Если вы хотите, чтобы сами кнопки расширялись и заполняли дополнительное пространство, используйте атрибут sticky, чтобы они прилипали к краям столбцов:

Button0.grid(row = 1, column = 0, sticky="ew")
Button1.grid(row = 1, column = 1, sticky="ew")
Button2.grid(row = 1, column = 2, sticky="ew")

enter image description here

Если вы хотите, чтобы кнопки оставались в центре, присвойте весь вес пустым столбцам со следующим кодом:

calculation.grid(row=0, column=1, columnspan = 3)
Button0.grid(row=1, column=1, sticky="ew")
Button1.grid(row=1, column=2, sticky="ew")
Button2.grid(row=1, column=3, sticky="ew")
root.grid_columnconfigure((0, 4), weight=1)

enter image description here

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