Изменение размера окна Tkinter не работает даже с sticky () и columnconfigure () - rasberry pi работает с rasbian - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь сделать простой графический интерфейс с кнопками и заголовком.В настоящее время я пишу на Rasberry Pi, работающем на Rasbian (модифицированная версия Linux Darbian).Когда я пытаюсь изменить размер окна, я создаю его, который ведет себя так, как будто ничего не произошло, и исчезает, потому что окно слишком маленькое.Я делаю так же, как в других уроках.Вот мой код:

content = ttk.Frame(root, padding=(3,3,12,12))
    content.grid(column=0, row=0, sticky=(N, S, E, W))

    frame = ttk.Frame(content, height=500, width=900)
    frame.grid(column=0, row=0, columnspan=3, rowspan=3, sticky=(N, S, E, W))

    title = ttk.Label(content, text="QRNG")
    title.grid(column=1, row=0, sticky=(N))

    diceButton = ttk.Button(content, text="Dice")
    diceButton.grid(column=0, row=1, sticky=(W))

    imageButton = ttk.Button(content, text="Image")
    imageButton.grid(column=1, row=1, sticky=())

    randomNumberButton = ttk.Button(content, text="Random Numbers")
    randomNumberButton.grid(column=2, row=1, sticky=(E))

    fileButton = ttk.Button(content, text="Random Number File")
    fileButton.grid(column=0, row=2, sticky=(S, W))

    otherButton = ttk.Button(content, text="Empty")
    otherButton.grid(column=1, row=2, sticky=(S))

    exitButton = ttk.Button(content, text="Exit")
    exitButton.grid(column=2, row=2, sticky=(S, E))

    root.columnconfigure(0, weight=1, minsize=80)
    root.rowconfigure(0, weight=1, minsize=80)

    root.columnconfigure(0, weight=1, minsize=80)
    root.columnconfigure(1, weight=1, minsize=80)
    root.columnconfigure(2, weight=1, minsize=80)
    root.rowconfigure(0, weight=1, minsize=80)
    root.rowconfigure(1, weight=1, minsize=80)
    root.rowconfigure(2, weight=1, minsize=80)

Извините за большой блок, но я не могу найти причину этой проблемы.Липкий работает, когда GUI запущен, но после ничего больше не работает, и графический интерфейс статичен.Даже более странно, я скопировал и вставил пример с этой веб-страницы, и это сработало, но когда я пытаюсь применить это к моему собственному коду, это не работает.Я взял код с конца этой веб-страницы .Я был бы очень признателен за любую помощь, оказанную.На всякий случай я выбрал пару вариантов с кнопок, которые, я думаю, были не важны для понимания кода.

1 Ответ

0 голосов
/ 19 июня 2019

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

Другая проблема в том, что у вас есть только виджеты в строке 0, столбце 0 корневого окна, но вы настроили вес строки и столбца 0-3.

Итак, если вы хотите, чтобы content заполнил все окно, удалите конфигурацию строк 1 и 2 и столбцов 1 и 2 из корневого окна.

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

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

root.columnconfigure(0, weight=1, minsize=80)
root.rowconfigure(0, weight=1, minsize=80)

content = ttk.Frame(root, padding=(3,3,12,12))
content.grid(column=0, row=0, sticky=(N, S, E, W))

content.rowconfigure(0, weight=1, minsize=80)
content.columnconfigure(0, weight=1, minsize=80)
content.columnconfigure(1, weight=1, minsize=80)
content.columnconfigure(2, weight=1, minsize=80)
content.rowconfigure(1, weight=1, minsize=80)
content.rowconfigure(2, weight=1, minsize=80)

frame = ttk.Frame(content, height=500, width=900)
title = ttk.Label(content, text="QRNG")
diceButton = ttk.Button(content, text="Dice")
imageButton = ttk.Button(content, text="Image")
randomNumberButton = ttk.Button(content, text="Random Numbers")
fileButton = ttk.Button(content, text="Random Number File")
otherButton = ttk.Button(content, text="Empty")
exitButton = ttk.Button(content, text="Exit")

frame.grid(column=0, row=0, columnspan=3, rowspan=3, sticky=(N, S, E, W))
title.grid(column=1, row=0, sticky=(N))
diceButton.grid(column=0, row=1, sticky=(W))
imageButton.grid(column=1, row=1, sticky=())
randomNumberButton.grid(column=2, row=1, sticky=(E))
fileButton.grid(column=0, row=2, sticky=(S, W))
otherButton.grid(column=1, row=2, sticky=(S))
exitButton.grid(column=2, row=2, sticky=(S, E))
...