Как добавить расстояние между всеми фиксированными виджетами - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть приложение на основе GUI. Я просто хочу, чтобы все виджеты, такие как Текстовое поле или Кнопки , имели фиксированный размер. И я успешно это сделал! Но

Я хочу, чтобы, если кто-то изменял размеры окна, виджеты должны были иметь одинаковый фиксированный размер НО он должен увеличивать / уменьшать пробелы между ними, а не изменять размер виджетов. (Я не хочу, чтобы мои виджеты были изменены, поэтому я выбираю этот метод для увеличения / уменьшения их расстояния между собой).

Например: Original Application state (исходное состояние приложения) vertically resized (Попытка изменить размер окна до большего размера по вертикали, но вы можете видеть, что нет кнопок Размер виджета изменился. Просто добавлено больше места ...) horizontal resize (Попытка изменить размер по горизонтали)

Я обнаружил, что QSizePolicy делает то же самое, что я хочу, но не сделал хороших примеров нигде нет.

Это мой код:

from PySide2 import QtWidgets
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtGui import QPainter, QBrush, QPen, QColor, QPolygon
from PySide2.QtCore import Qt, QRect, QPoint, QRectF
import sys

class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(200, 200, 300, 300)
        self.setWindowTitle("test app")

        self.label = QtWidgets.QLineEdit(self)
        self.label.setText("my first label!")
        self.label.move(110,10)
        self.label.resize(180,25)

        self.b1 = QtWidgets.QPushButton(self)
        self.b1.setText("Fixed Button size!")
        self.b1.move(180,250)
        self.b1.resize(110, 25)
        self.b1.setStyleSheet("""
        background-color: #4CAF50;
        border: none;
        color: white;
        text-align: center;
        font-size: 12px;
        font-family: Arial
        """)

    def paintEvent(self, e):

        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):

        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)

        qp.setBrush(QColor(200, 50, 8))
        qp.drawRect(0, 0, 100, 299)

        qp.setBrush(QColor(250, 255, 250))
        qp.drawRect(110, 50, 180, 180)


def window():
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

window()


Скрывает виджеты при изменении размера. Я хочу сделать кнопки и текстовые виджеты, чтобы добавить пробелы между ними при изменении размера. Теперь он скрывает эти виджеты, потому что я не использовал hstack или vstack. Я знаю.

Просто не знаю, как использовать QSizePolicy для разнесения.

Заранее спасибо ...

1 Ответ

1 голос
/ 20 апреля 2020

Для того, что вы хотите получить, существует несколько решений, мое решение использует свойства макетов:

import sys

from PySide2 import QtCore, QtGui, QtWidgets


class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(200, 200, 300, 300)
        self.setWindowTitle("test app")

        label = QtWidgets.QLabel(self)
        label.setFixedWidth(100)
        label.setStyleSheet("background-color: rgb(200, 50, 8)")

        lineedit = QtWidgets.QLineEdit()
        lineedit.setFixedWidth(180)

        button = QtWidgets.QPushButton("Fixed Button size!")
        button.setFixedSize(110, 25)
        button.setStyleSheet(
            """
        background-color: #4CAF50;
        border: none;
        color: white;
        text-align: center;
        font-size: 12px;
        font-family: Arial
        """
        )

        widget = QtWidgets.QLabel()
        widget.setFixedSize(180, 180)
        widget.setStyleSheet("background-color: rgb(250, 255, 250)")

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)

        right_container = QtWidgets.QWidget()

        botton_widget = QtWidgets.QWidget()
        botton_widget.setContentsMargins(0, 0, 0, 0)
        botton_widget.setFixedWidth(180)
        hlay2 = QtWidgets.QHBoxLayout(botton_widget)
        hlay2.setContentsMargins(0, 0, 0, 0)
        hlay2.addStretch()
        hlay2.addWidget(button)

        glay = QtWidgets.QGridLayout(right_container)
        glay.addWidget(QtWidgets.QWidget(), 0, 0, 5, 1)
        glay.addWidget(lineedit, 0, 1)
        glay.addWidget(QtWidgets.QWidget(), 1, 1)
        glay.addWidget(widget, 2, 1, alignment=QtCore.Qt.AlignCenter)
        glay.addWidget(QtWidgets.QWidget(), 3, 1)
        glay.addWidget(QtWidgets.QWidget(), 0, 2, 5, 1)
        glay.addWidget(botton_widget, 4, 1)

        hlay = QtWidgets.QHBoxLayout(central_widget)
        hlay.setContentsMargins(0, 0, 0, 0)
        hlay.addWidget(label)
        hlay.addWidget(right_container)


def main():
    app = QtWidgets.QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...