PyQt:QPushButton拉伸到相等大小

问题描述 投票:0回答:1

我有一个从1到42的按钮网格。我想将某些按钮分成两个(蓝色/粉红色),另一些作为一个按钮(绿色)。我希望绿色区域的大小与蓝色/粉红色区域的总和相同。当我删除I​​temButton1和ItemButton2上的setSizePolicy时,我得到了想要的结果,但是按钮变得很小,并且不能占据整个区域。如何获得相等的面积并扩大按钮?

from PyQt5 import QtCore, QtWidgets,QtGui
from PyQt5.QtWidgets import *
import sys

class FormWidget(QWidget):
    def __init__(self, parent=None):
        super(FormWidget, self).__init__(parent)
        self.grid = QGridLayout(self)

        itemNumber = 0
        final = ['a1,1,,', 'a2,2,,', 'a3,3,,', 'a4,4,,', 'a5,5,,', 'a6,6,,', 'a7,7,,', 'a8,8,,', 'a9,9,,', 'a10,,10,28',
          'a11,,11,29', 'a12,,12,30', 'a13,,13,31', 'a14,,14,32', 'a15,,15,33', 'a16,,16,34', 'a17,,17,35',
          'a18,,18,36', 'a19,,19,37', 'a20,,20,38', 'a21,,21,39', 'a22,,22,40', 'a23,,23,41', 'a24,,24,42',
          'a25,,25,43', 'a26,,26,44', 'a27,,27,45', 'a28,1,,', 'a29,1,,', 'a30,1,,', 'a31,1,,', 'a32,1,,', 'a33,1,,',
          'a34,1,,', 'a35,1,,', 'a36,1,,', 'a37,1,,', 'a38,1,,', 'a39,1,,', 'a40,1,,', 'a41,1,,','a42,1,,']

        for i in range(1, 12, 2):
            for k in range(0, 7):
                getData = str(final[itemNumber]).split(',')
                self.PrimaryComboLabel = QLabel()
                self.PrimaryComboLabel.setText(getData[0])
                print(getData)
                if getData[1].strip() == '':
                    frame = QFrame()
                    frame.setStyleSheet("background-color: rgb(200, 255, 255)")
                    self.grid.addWidget(frame, k, i, 1, 1)
                    frame2 = QFrame()
                    frame2.setStyleSheet("background-color: rgb(255, 150, 255)")
                    self.grid.addWidget(frame2, k, i + 1, 1, 1)
                    self.grid.addWidget(self.PrimaryComboLabel, k, i, 1, 2, QtCore.Qt.AlignCenter)
                    self.ItemButton1 = QPushButton('')
                    self.grid.addWidget(self.ItemButton1, k, i, 1, 1)
                    self.ItemButton1.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
                    self.ItemButton1.setFlat(True)
                    self.ItemButton2 = QPushButton('')
                    self.grid.addWidget(self.ItemButton2, k, i + 1, 1, 1)
                    self.ItemButton2.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
                    self.ItemButton2.setFlat(True)
                else:
                    frame = QFrame()
                    frame.setStyleSheet("background-color: rgb(0, 255, 0)")
                    self.grid.addWidget(frame, k, i, 1, 2)
                    self.grid.addWidget(self.PrimaryComboLabel, k, i, 1, 2, QtCore.Qt.AlignCenter)
                    self.PrimaryComboLabel.setScaledContents(True)
                    self.ItemButton3 = QPushButton('')
                    self.grid.addWidget(self.ItemButton3, k, i, 1, 2)
                    self.ItemButton3.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
                    self.ItemButton3.setFlat(True)

                itemNumber = itemNumber + 1

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = FormWidget()
    ex.show()
    sys.exit(app.exec_())
python pyqt
1个回答
0
投票

主要问题似乎是您的列宽的QSizePolicy类型错误。尝试使用Preferred似乎可以解决问题:

from PyQt5 import QtCore, QtWidgets,QtGui
from PyQt5.QtWidgets import *
import sys

class FormWidget(QWidget):
    def __init__(self, parent=None):
        super(FormWidget, self).__init__(parent)
        self.grid = QGridLayout(self)

        itemNumber = 0
        final = ['a1,1,,', 'a2,2,,', 'a3,3,,', 'a4,4,,', 'a5,5,,', 'a6,6,,', 'a7,7,,', 'a8,8,,', 'a9,9,,', 'a10,,10,28',
          'a11,,11,29', 'a12,,12,30', 'a13,,13,31', 'a14,,14,32', 'a15,,15,33', 'a16,,16,34', 'a17,,17,35',
          'a18,,18,36', 'a19,,19,37', 'a20,,20,38', 'a21,,21,39', 'a22,,22,40', 'a23,,23,41', 'a24,,24,42',
          'a25,,25,43', 'a26,,26,44', 'a27,,27,45', 'a28,1,,', 'a29,1,,', 'a30,1,,', 'a31,1,,', 'a32,1,,', 'a33,1,,',
          'a34,1,,', 'a35,1,,', 'a36,1,,', 'a37,1,,', 'a38,1,,', 'a39,1,,', 'a40,1,,', 'a41,1,,','a42,1,,']

        for i in range(1, 12, 2):
            for k in range(0, 7):
                getData = str(final[itemNumber]).split(',')
                self.PrimaryComboLabel = QLabel()
                self.PrimaryComboLabel.setText(getData[0])
                print(getData)
                if getData[1].strip() == '':
                    frame = QFrame()
                    frame.setStyleSheet("background-color: rgb(200, 255, 255)")
                    self.grid.addWidget(frame, k, i, 1, 1)
                    frame2 = QFrame()
                    frame2.setStyleSheet("background-color: rgb(255, 150, 255)")
                    self.grid.addWidget(frame2, k, i + 1, 1, 1)
                    self.grid.addWidget(self.PrimaryComboLabel, k, i, 1, 2, QtCore.Qt.AlignCenter)
                    self.ItemButton1 = QPushButton('')
                    self.grid.addWidget(self.ItemButton1, k, i, 1, 1)
                    self.ItemButton1.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
                    self.ItemButton1.setFlat(True)
                    self.ItemButton2 = QPushButton('')
                    self.grid.addWidget(self.ItemButton2, k, i + 1, 1, 1)
                    self.ItemButton2.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
                    self.ItemButton2.setFlat(True)
                else:
                    frame = QFrame()
                    frame.setStyleSheet("background-color: rgb(0, 255, 0)")
                    self.grid.addWidget(frame, k, i, 1, 2)
                    self.grid.addWidget(self.PrimaryComboLabel, k, i, 1, 2, QtCore.Qt.AlignCenter)
                    self.PrimaryComboLabel.setScaledContents(True)
                    self.ItemButton3 = QPushButton('')
                    self.grid.addWidget(self.ItemButton3, k, i, 1, 2)
                    self.ItemButton3.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
                    self.ItemButton3.setFlat(True)

                itemNumber = itemNumber + 1

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = FormWidget()
    ex.resize(750,100)
    ex.show()
    sys.exit(app.exec_())

我将主窗口的大小调整为一些常量,您可能需要根据需要进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.