Настройки элементов управления, связанные с размером, в PyQt5-Qt Designer (политика sizePolicy)
Настройки элементов управления, связанные с размером, в PyQt5-Qt Designer (политика sizePolicy)

1 Установите размер элемента управления

1.1 Просмотр максимальных и минимальных размеров

  • По умолчанию максимальное и минимальное значения элемента управления не ограничены;
  • Например, перетащите кнопку и посмотрите ее свойство:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • На рисунке видно, что минимальное значение равно 0, а максимальное значение также имеет предел. Мы можем перетаскивать элемент управления для увеличения и уменьшения масштаба в этом диапазоне.

1.2 Установите максимальный и минимальный размеры

  • Через редактор свойств управления,Мы устанавливаем минимальное значение элемента управления равным200200, максимальное значение — 400400,следующее:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • Тогда этот элемент управления может изменяться только в диапазоне 200–400, например 200*200, следующим образом:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • Например, 400*400 следующим образом:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения

2 Желаемый размер

2.1 Ожидаемый размер

  • Каждый элемент управления имеет рекомендуемый размер по умолчанию или Желаемый размер. размер(sizeHint);
  • Большинство элементов управления,sizeHintтолько для чтениясвойство;
  • Перетащите две кнопки и текстовые элементы управления следующим образом:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • сохранить какtest011_sizeHint.ui,и преобразован вtest011_sizeHint.py
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test011_sizeHint.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(130, 210, 171, 101))
        self.textEdit.setObjectName("textEdit")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(130, 110, 194, 30))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout.addWidget(self.pushButton_2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))

2.2 Получите желаемый размер

  • существоватьtest011_sizeHint.pyкод中加入следующее,Получите Желаемый размер из трех элементов управления соответственно:
Язык кода:python
кодКоличество запусков:0
копировать
self.control.sizeHint().height()
self.control.sizeHint().ширина()
  • получатьtextEditЖелаемый размер:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
print(f"Получите Желаемый из элемента управления textEdit Высота размера: {self.textEdit.sizeHint().height()}")
print(f"Получите Желаемый из элемента управления textEdit Ширина размера: {self.textEdit.sizeHint().width()}")
  • получатьpushButtonиз Желаемый размер:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
print(f"Получите Желаемый из кнопки управления Высота размера: {self.pushButton.sizeHint().height()}")
print(f"Получите Желаемый из кнопки управления Ширина размера: {self.pushButton.sizeHint().width()}")
  • получатьpushButton_2из Желаемый размер:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
 print(f"Получить Желаемый элемент управления pushButton_2 Высота размера: {self.pushButton_2.sizeHint().height()}")
print(f"Получить Желаемый элемент управления pushButton_2 Ширина размера: {self.pushButton_2.sizeHint().width()}")
  • test011_sizeHint.py修改后следующее:
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test011_sizeHint.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow") s
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        print(f"Получите Желаемый из элемента управления textEdit Высота размера: {self.textEdit.sizeHint().height()}")
        print(f"Получите Желаемый из элемента управления textEdit Ширина размера: {self.textEdit.sizeHint().width()}")
        self.textEdit.setGeometry(QtCore.QRect(130, 210, 171, 101))
        self.textEdit.setObjectName("textEdit")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(130, 110, 194, 30))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        print(f"Получите Желаемый из кнопки управления Высота размера: {self.pushButton.sizeHint().height()}")
        print(f"Получите Желаемый из кнопки управления Ширина размера: {self.pushButton.sizeHint().width()}")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setObjectName("pushButton_2")
        print(f"Получить Желаемый элемент управления pushButton_2 Высота размера: {self.pushButton_2.sizeHint().height()}")
        print(f"Получить Желаемый элемент управления pushButton_2 Ширина размера: {self.pushButton_2.sizeHint().width()}")
        self.horizontalLayout.addWidget(self.pushButton_2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
  • создаватьmain.pyвызвать и выполнить:
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 18 сентября 2023 г.
# Имя файла: main.py
# Функция: вход в главную программу
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import sys
from test_case.test011_sizeHint import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    window.show()

    sys.exit(app.exec_())
  • Ожидаемые размеры получены следующие:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
Получить Желаемый управляющего текста Править Высота размер: 192
Получить Желаемый управляющего текста Править Ширина размера: 256
Получить желаемый элемент управления. Высота размера: 34
Получить желаемый элемент управления. Ширина размера: 47
Получите управление pushButton_2 Желаемый Высота размера: 34
Получите управление pushButton_2 Желаемый Ширина размера: 47
  • Минимальный ожидаемый размер и ожидаемый размер большинства элементов управления одинаковы, а метод получения:
Язык кода:python
кодКоличество запусков:0
копировать
self.контроль.minimumSize().height()
self.контроль.minimumSize().width()

3 sizePolicy (политика размера)

3.1 Введение

  • sizePolicy(Стратегия размера)是用来管理部件尺寸из;
  • Каждый виджет имеет размер или политику размера, которая определяет, как размер виджета распределяется при управлении макетом;
  • Размер поQSizePolicyреализация класса;
  • Каждый компонент в основном имеет два типа стратегий: горизонтальную стратегию и вертикальную стратегию.

3.2 Значения атрибутов

  • Будь то горизонтальная стратегия или вертикальная стратегия, существует следующее свойство;
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения

свойство

иллюстрировать

Зафиксированный

Остается фиксированным размером и не изменяется в зависимости от доступного пространства.

Минимум

Как можно меньшего размера, чтобы соответствовать минимальным требованиям к размеру

Максимум

Максимально большого размера, не превышая требований к максимальному размеру.

Предпочтительный

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

Расширение

Расширьте как можно больше, чтобы заполнить доступное пространство, но не превышайте максимальный размер.

игнорируется

Менеджер макета игнорирует размер виджетов

  • Горизонтальное растяжение и вертикальное растяжение в основном описывают соотношение занятости доступного пространства.

4 примера

  • Перетащите горизонтальный макет:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • Перетащите элемент управления «Дерево» в горизонтальный макет, и он охватит весь макет:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • Перетащите другой элемент управления панели, теперь следующим образом:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • 而以上两个部件из Существуют как горизонтальные, так и вертикальные стратегии.Expanding,Горизонтальное и вертикальное растяжение равны 0.,Каждый занимает 50% места;
  • Мы настраиваем элемент управления деревом слева, чтобы учитывать одну треть, а элемент управления панелью справа, чтобы учитывать две трети:

Существуют как горизонтальные, так и вертикальные стратегии.Expanding,Установите горизонтальное и вертикальное растяжение элемента управления «Дерево» на 1.,Просто установите горизонтальное и вертикальное растяжение панели управления на 2;

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
  • Затем перетащите несколько меток и текста в панель управления справа, как показано на рисунке:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • сохранить какtest012_sizePolicy.ui,преобразован вtest012_sizePolicy.py
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test012_sizePolicy.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(9, 9, 781, 551))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.treeView = QtWidgets.QTreeView(self.horizontalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(1)
        sizePolicy.setHeightForWidth(self.treeView.sizePolicy().hasHeightForWidth())
        self.treeView.setSizePolicy(sizePolicy)
        self.treeView.setObjectName("treeView")
        self.horizontalLayout.addWidget(self.treeView)
        self.frame = QtWidgets.QFrame(self.horizontalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(2)
        sizePolicy.setVerticalStretch(2)
        sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
        self.frame.setSizePolicy(sizePolicy)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.listView = QtWidgets.QListView(self.frame)
        self.listView.setGeometry(QtCore.QRect(70, 30, 291, 192))
        self.listView.setObjectName("listView")
        self.pushButton = QtWidgets.QPushButton(self.frame)
        self.pushButton.setGeometry(QtCore.QRect(250, 120, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.widget = QtWidgets.QWidget(self.frame)
        self.widget.setGeometry(QtCore.QRect(100, 60, 239, 22))
        self.widget.setObjectName("widget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.horizontalLayout_2.addWidget(self.label)
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout_2.addWidget(self.lineEdit)
        self.widget1 = QtWidgets.QWidget(self.frame)
        self.widget1.setGeometry(QtCore.QRect(100, 90, 224, 22))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.label_2 = QtWidgets.QLabel(self.widget1)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_3.addWidget(self.label_2)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.widget1)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.horizontalLayout_3.addWidget(self.lineEdit_2)
        self.horizontalLayout.addWidget(self.frame)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Авторизоваться"))
        self.label.setText(_translate("MainWindow", "имя пользователя:"))
        self.label_2.setText(_translate("MainWindow", "пароль:"))
  • создаватьmain.pyвызвать и выполнить:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 18 сентября 2023 г.
# Имя файла: main.py
# Функция: вход в главную программу
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import sys
from test_case.test012_sizePolicy import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    window.show()

    sys.exit(app.exec_())
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose