Использование Tkinter Grid Manager для центрирования кнопок, а также для заполнения всего кадра - PullRequest
0 голосов
/ 08 июля 2019

Я использую Tkinter для создания диалогового окна. Одна из вещей, которую я хочу в коробке - это набор кнопок, которые что-то делают. Я хочу добавить их в созданный мной кадр, но у меня возникли проблемы. Я хочу, чтобы рамка показывала цвет фона, а кнопки центрировались в этой рамке. Прямо сейчас я могу только выяснить, как сделать одно или другое. Если я добавлю sticky = N + S + E + W в размещение сетки фрейма, весь фрейм будет заполнен цветом фона, но кнопки застрянут слева вверху. Если я не включу стикер, кнопки будут красиво отцентрированы, но вы можете видеть только небольшую часть цвета фона.

Как вы можете заставить обе эти вещи произойти?

Centered, No Fill

Not Centered, Fill

Большое спасибо. Вот мой код:


from tkinter import *

def clearA():
    pass

root = Tk()
root.geometry("800x400")

for r in range(2):
    root.rowconfigure(r, weight=1)
for c in range(5):
    root.columnconfigure(c, weight=1)

clearButtonsFrame = Frame(root, bg='#E0EEEE')
clearButtonsFrame.grid(row = 0, column = 0, rowspan = 3, columnspan = 6, sticky=N+E+S+W)


clearButton = Button(clearButtonsFrame, text="Button 1", width=40)
clearButton.grid(row =0, column=0, padx=10)

selectButton = Button(clearButtonsFrame, text="Button 2", width=40)
selectButton.grid(row =0, column=1)


root.mainloop()

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы, возможно, немного усложняете вещи.

Кнопки находятся в отдельной рамке;то, что вам нужно сделать, это (1) убедиться, что кнопки расположены по центру по вертикали и расположены с каждой стороны относительно центра в этом кадре.(2) вы должны убедиться, что фрейм заполняет контейнер, в который он будет помещен, а не сжиматься вокруг его виджетов.

Я предлагаю pack фрейм внутри корня, используя kwargs expand=Truefill=tk.BOTH выполнить (2).Вы можете использовать сетку для более сложной компоновки, но в приведенном примере это не обязательно.

Внутри рамки вы можете place кнопки относительно центра, используя anchor=tk.CENTER, наполовину ввертикальное направление rely=0.5, и центрировано на левой половине, а правая половина в горизонтальном направлении relx=0.25 и relx=0.75

Теперь вы можете изменить размер root, и пропорциональное расположение кнопок будетостаются прежними.

import tkinter as tk

root = tk.Tk()
root.geometry("800x400")

clearButtonsFrame = tk.Frame(root, bg='cyan')
clearButtonsFrame.pack(expand=True, fill='both')

clearButton = tk.Button(clearButtonsFrame, text="Button 1", width=40)
clearButton.place(relx=0.25, rely=0.5, anchor=tk.CENTER)

selectButton = tk.Button(clearButtonsFrame, text="Button 2", width=40)
selectButton.place(relx=0.75, rely=0.5, anchor=tk.CENTER)

root.mainloop()
0 голосов
/ 08 июля 2019
from tkinter import *

def clearA():
    pass

root = Tk()
root.geometry("800x400")
root.configure(background='lightblue')  # You can configure background color

for r in range(2):
    root.rowconfigure(r, weight=1)
for c in range(5):
    root.columnconfigure(c, weight=1)

clearButtonsFrame = Frame(root, bg='#E0EEEE')
clearButtonsFrame.grid(row = 0, column = 0, rowspan = 3, columnspan = 6)


clearButton = Button(clearButtonsFrame, text="Button 1", width=40)
clearButton.grid(row =0, column=0, padx=10)

selectButton = Button(clearButtonsFrame, text="Button 2", width=40)
selectButton.grid(row =0, column=1)


root.mainloop()

Вы можете настроить цвет фона, используя root.configure (background = 'независимо от цвета'). Я удалил N + E + S + W и просто добавил строку конфигурации, чтобы цвет фона оставался, а кнопки были в центре.

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