我有一个从1到42的按钮网格。我想将某些按钮分成两个(蓝色/粉红色),另一些作为一个按钮(绿色)。我希望绿色区域的大小与蓝色/粉红色区域的总和相同。当我删除ItemButton1和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_())
主要问题似乎是您的列宽的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_())
我将主窗口的大小调整为一些常量,您可能需要根据需要进行更改。