我很难理解一些看似简单的事情:
我有一个从 QPushButton 子类化的自定义小部件,我在 QGridLayout() 中布置了多个实例。当我添加一个 paint() 函数并绘制背景颜色以填充按钮的 rect() 时,布局的间距似乎不再起作用。这是显示我的意思的屏幕截图:
这显示了遵循布局间距的默认 QPushButtons 和不遵循的自定义“按钮”。我确定我只需要(重新)在我的 CustomButton 中实现一些东西,但找不到它是什么。我尝试设置 contentMargins 无济于事。
我错过了什么?也许我不需要填写 self.rect() 而是其他东西?这是生成上述屏幕截图的示例代码:
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class CustomButton(QPushButton):
def __init__(self, tool, icon=None, parent=None):
super(CustomButton, self).__init__(parent)
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.setMinimumWidth(200)
self.frameGeometry()
def paintEvent(self, event):
painter = QPainter(self)
bgColor = QColor(60, 60, 60)
painter.fillRect(self.rect(), bgColor)
app = QApplication(sys.argv)
mainWindow = QWidget()
grid = QGridLayout()
grid.setSpacing(10)
mainWindow.setLayout(grid)
for i in xrange(4):
btn1 = CustomButton('A')
btn2 = QPushButton('B')
grid.addWidget(btn1, 0, i)
grid.addWidget(btn2, 1, i)
mainWindow.show()
sys.exit(app.exec_())