Хобрук: Ваш путь к мастерству в программировании

Tkinter: как создать приложение для нескольких разных разрешений экрана

Итак, я работаю над приложением на Python с Tkinter в качестве графического интерфейса. Первое изображение — скриншот с компьютера моего коллеги, второе — скриншот с моего компьютера. Как я могу сделать виджеты (кнопки, метки, записи и т. д.) адаптируемыми для любого разрешения экрана? GUI с компьютера коллеги

GUI с моего компьютера

Пример моего кода

self.e_fname = Entry(self)
    self.e_fname.place(relx=0.21, rely=0.18, height=40, relwidth=0.27)
    self.l_fname = Label(self, text='''First Name:''', font=font9,bg='#0066AB')
    self.l_fname.place(relx=0.055, rely=0.13, height=40, width=514)
    # last name
    self.e_lname = Entry(self)
    self.e_lname.place(relx=0.55, rely=0.18, height=40, relwidth=0.27)
    self.l_lname = Label(self, text='''Last Name:''', font=font9,bg='#0066AB')
    self.l_lname.place(relx=0.395, rely=0.13, height=40, width=514)
    # email
    self.e_mail = Entry(self)
    self.e_mail.place(relx=0.21, rely=0.29,height=40, relwidth=0.57)
    self.l_mail = Label(self, text='''Email Address:''', font=font9, bg='#0066AB')
    self.l_mail.place(relx=0.06, rely=0.24, height=31, width=514)
    # phone number
    self.e_phone = Entry(self)
    self.e_phone.place(relx=0.21, rely=0.40, height=40, relwidth=0.57)
    self.l_phone = Label(self, text= '''Phone Number:''', font=font9, bg='#0066AB')
    self.l_phone.place(relx=0.06, rely=0.36, height=31, width=514)
    # Address
    self.e_saddress = Entry(self)
    self.e_saddress.place(relx=0.21, rely=0.51, height=40, relwidth=0.57)
    self.adress = Label(self, text='''Address:''', font=font9, bg='#0066AB')
    self.adress.place(relx=0.05, rely=0.46, height=31, width=514)
    # Address Line 2
    self.e_saddress2 = Entry(self)
    self.e_saddress2.place(relx=0.21, rely=0.62, height=40, relwidth=0.57)
    self.adress2 = Label(self, text='''Address Confirmation:''', font=font9, bg='#0066AB')
    self.adress2.place(relx=0.075, rely=0.57, height=31, width=514)
    # State
    self.state = Label(self, text='''State:''', font=font9, bg='#0066AB')

  • используйте параметры fill и expand метода pack() или эквиваленты grid(). Используйте place() только в особых ситуациях, это не одна из них. Используйте ttk и установите метку пользовательского стиля. 06.08.2018
  • Как вы определяете адаптивность? 06.08.2018
  • @Bryan Oakley Сохранение одного и того же макета на мониторах разного размера 06.08.2018

Ответы:


1

Лучший способ сохранить свой макет пользовательского интерфейса в системах с разным разрешением и размером шрифта — использовать grid и pack вместо place. place на самом деле хорош только для очень специфических типов проблем, и отзывчивость не является его сильной стороной.

В вашем конкретном случае, похоже, было бы неплохо использовать grid, так как ваши виджеты располагаются в строках и столбцах. При использовании grid позаботьтесь о том, чтобы использовать все параметры, особенно атрибут sticky. Кроме того, убедитесь, что вы используете преимущества методов rowconfigure и columnconfigure, чтобы присвоить некоторым или всем вашим строкам и столбцам ненулевой вес, чтобы для них было выделено дополнительное пространство.

06.08.2018
  • Большое спасибо! 06.08.2018
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

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

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..