Кнопка Tkinter по умолчанию бесконечно большая - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь настроить базовый графический интерфейс с двумя кнопками и некоторым количеством меток (возможно, 4 или около того).

У меня сложилось впечатление, что кнопки Tkinter имеют размер по умолчанию, который соответствует объему текста, содержащегося в кнопке.Однако, когда мои кнопки появляются на экране, они, кажется, занимают как можно большую часть экрана в зависимости от того, где я их размещаю.Вот мой код:

from tkinter import *

root = Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

screen_width2 = screen_width/1.3
screen_height2 = screen_height/1.3

a = str(int(screen_width2)) + "x" + str(int(screen_height2))

root.geometry (a)

root.title("Tester")

welcomeUser = Label(root, text ="Welcome User")
upload = Button(root, text="Upload")
run = Button(root, text="Run")

welcomeUser.place(bordermode=INSIDE, relheight= 0.25, relwidth= 1.0)
upload.place(bordermode=INSIDE, relheight= 1.0, relwidth= 0.25)
run.place(bordermode=INSIDE, relheight= 1.0, relwidth= 1.75)

root.mainloop()

Например, когда я запускаю этот код, текст для кнопки «Выполнить» находится в правильном месте, но фактическая кнопка занимает всего окно.Какая бы кнопка не использовалась последней, затмевает все остальное в окне.

Я пытался изменить размер кнопки с помощью config() и просто изменил размер в пределах своих собственных параметров, таких как run = Button(root, text="Run", height=100, width=100).

Iзнаю, что это как-то связано с тем, что я использую place(), потому что, когда я использую pack() или grid(), размер кнопки по умолчанию (размер текста).

Для людейкто скажет: «Используйте grid вместо place()» - я не могу понять, как лучше grid().Это кажется гораздо менее интуитивно понятным и гораздо менее эффективным, особенно для размеров окна приложений, зависящих от разрешения экрана (как часть моего кода).На самом деле весь формат grid() намного слабее, чем просто использование мер с плавающей точкой относительно окна (т.е. как это делается с использованием place).Я пришел из системы ОС, где это стандартная практика, и люди, которые используют пиксели и т. Д., Высмеиваются.Сценарий, похоже, перевернут на StackOverflow с помощью Tkinter.Не стесняйтесь передумать.

Мой вопрос: как мне сохранить размер кнопок по умолчанию (инкапсулирующий текст), сохраняя при этом возможность их эффективного размещения?

1 Ответ

2 голосов
/ 27 апреля 2019

Когда вы используете place и указываете relwith и / или relheight, вы запрашиваете, чтобы ширина или высота кнопок была относительно относительно родительского элемента .В этом случае родитель является корневым окном.

Таким образом, если вы установите relheight на 1, вы запрашиваете, чтобы кнопка была точно такой же высоты, как и все окно.Точно так же, когда вы устанавливаете relwidth на .25, вы просите, чтобы он был на 1/4 ширины всего окна.

Это легко увидеть, просто удалив свойства relwidth и relheight, и кнопки будут иметь их естественный размер.

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