簡體   English   中英

如何在所有固定小部件之間添加間距

[英]How to add spacing between all fixed widgets

我有一個基於的 GUI 應用程序。 我只希望文本框按鈕等所有小部件具有固定大小。 我成功地做到了!

我希望如果有人調整 window 的大小,小部件必須具有相同的固定大小,它應該增加/減少它們之間的空間,而不是改變小部件的大小。 (我不希望我的小部件被調整大小,這就是為什么我選擇這種方法來增加/減少它們之間的空間)。

例如: 原始應用程序狀態 (原申請狀態) 垂直調整大小 (嘗試將 window 垂直調整為更大的尺寸,但您可以看到按鈕小部件的尺寸沒有改變。只是添加了更多空間......) 水平調整大小 (嘗試水平調整大小)

我發現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()


它在調整大小時隱藏小部件。 我想讓按鈕和文本小部件在調整大小時在它們之間添加空格。 現在它隱藏了這些小部件,因為我沒有使用hstackvstack 我知道。

只是不知道如何將QSizePolicy用於間距目的。

提前致謝...

對於您想要獲得的有多種解決方案,我的解決方案使用布局的屬性:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM