QGraphicsView/QGraphicsScene 中的按钮无法正确绘制
Buttons in QGraphicsView/ QGraphicsScene not painting correctly
当我将按钮放入场景和 QGraphicsView 中时,按钮右侧的区域错误地变为灰色。
我可以在 Windows 和 Linux 中复制它。有什么技巧可以摆脱这个不需要的功能吗?
from PyQt5.QtWidgets import (QApplication, QGraphicsView, QGraphicsScene,
QPushButton, QLabel)
from PyQt5.QtCore import (Qt, QRectF)
from PyQt5 import QtCore
class MyView(QGraphicsView):
def __init__(self, parent = None):
super(MyView, self).__init__(parent)
self.button1 = QPushButton('Button1')
self.button1.setGeometry(-60, -60, 80, 40)
self.button2 = QPushButton('Button2')
self.button2.setGeometry(10, 10, 80, 40)
version = 'PYQT_VERSION_STR: ' + QtCore.PYQT_VERSION_STR + '\n'
version += 'QT_VERSION_STR: ' + QtCore.QT_VERSION_STR + '\n'
self.label = QLabel(version)
self.label.setGeometry(-100, 80, 160, 80)
self.setScene(QGraphicsScene())
self.scene().addWidget(self.button1)
self.scene().addWidget(self.button2)
self.scene().addWidget(self.label)
self.scene().setSceneRect(QRectF(-150, -150, 300, 300))
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
widget = MyView()
widget.show()
sys.exit(app.exec_())
当一个小部件被添加到图形场景时,它的代理使用小部件的 minimumSizeHint()
作为其几何的最小尺寸,无论您是否将小部件调整到更小的尺寸(我不不知道这是错误还是设计使然)。
结果如下:
- 您不能将代理的几何设置小于源小部件的最小尺寸[提示];
- 将小部件的大小调整为小于最小大小[提示]只会调整小部件的大小,但代理仍将使用该最小大小[提示];
例如,QPushButton 的最小尺寸提示约为 80x30(实际值取决于所使用的样式和字体),因此即使您将按钮的尺寸调整为更小的尺寸,其代理仍将是 80x30 .
为避免这种情况,您可以手动将小部件的最小大小设置为合理的值,或者子类化小部件并覆盖 minimumSizeHint()
。
当我将按钮放入场景和 QGraphicsView 中时,按钮右侧的区域错误地变为灰色。
我可以在 Windows 和 Linux 中复制它。有什么技巧可以摆脱这个不需要的功能吗?
from PyQt5.QtWidgets import (QApplication, QGraphicsView, QGraphicsScene,
QPushButton, QLabel)
from PyQt5.QtCore import (Qt, QRectF)
from PyQt5 import QtCore
class MyView(QGraphicsView):
def __init__(self, parent = None):
super(MyView, self).__init__(parent)
self.button1 = QPushButton('Button1')
self.button1.setGeometry(-60, -60, 80, 40)
self.button2 = QPushButton('Button2')
self.button2.setGeometry(10, 10, 80, 40)
version = 'PYQT_VERSION_STR: ' + QtCore.PYQT_VERSION_STR + '\n'
version += 'QT_VERSION_STR: ' + QtCore.QT_VERSION_STR + '\n'
self.label = QLabel(version)
self.label.setGeometry(-100, 80, 160, 80)
self.setScene(QGraphicsScene())
self.scene().addWidget(self.button1)
self.scene().addWidget(self.button2)
self.scene().addWidget(self.label)
self.scene().setSceneRect(QRectF(-150, -150, 300, 300))
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
widget = MyView()
widget.show()
sys.exit(app.exec_())
当一个小部件被添加到图形场景时,它的代理使用小部件的 minimumSizeHint()
作为其几何的最小尺寸,无论您是否将小部件调整到更小的尺寸(我不不知道这是错误还是设计使然)。
结果如下:
- 您不能将代理的几何设置小于源小部件的最小尺寸[提示];
- 将小部件的大小调整为小于最小大小[提示]只会调整小部件的大小,但代理仍将使用该最小大小[提示];
例如,QPushButton 的最小尺寸提示约为 80x30(实际值取决于所使用的样式和字体),因此即使您将按钮的尺寸调整为更小的尺寸,其代理仍将是 80x30 .
为避免这种情况,您可以手动将小部件的最小大小设置为合理的值,或者子类化小部件并覆盖 minimumSizeHint()
。