Python PyQT5在矩形中添加标签和图标
我有一个矩形列表,可以这样做:Python PyQT5在矩形中添加标签和图标,python,qt,user-interface,pyqt5,grid,Python,Qt,User Interface,Pyqt5,Grid,我有一个矩形列表,可以这样做: import sys from PyQt5.QtCore import Qt, QRect, QRectF from PyQt5.QtGui import * from PyQt5.QtWidgets import ( QGridLayout, QWidget, QApplication, QGraphicsScene, QGraphicsView, QGraphicsProxyWidget, QGraphics
import sys
from PyQt5.QtCore import Qt, QRect, QRectF
from PyQt5.QtGui import *
from PyQt5.QtWidgets import ( QGridLayout, QWidget, QApplication, QGraphicsScene,
QGraphicsView, QGraphicsProxyWidget, QGraphicsRectItem
)
class WidRect(QWidget):
def __init__(self, mIntMeasureId,mStrLabel=None):
super().__init__()
self.aIntMeasureId=mIntMeasureId
self.aStrLabel=mStrLabel
#self.setWidget(QLabel(mStrLabel))
def mousePressEvent(self, QMouseEvent):
if QMouseEvent.button() == Qt.LeftButton:
print("Left Button Clicked on measure "+ str(self.aIntMeasureId))
elif QMouseEvent.button() == Qt.RightButton:
#do what you want here
print("Right Button Clicked on measure "+ str(self.aIntMeasureId))
class MeasureGrid(QWidget):
#grid = None
#scene = None
def __init__(self, geometry, parent=None):
super(MeasureGrid, self).__init__(parent=parent)
#super().onclick.connec(self.click)
self.aLayMeasureGrid = QGridLayout(self)
self.aGsMeasureScene = QGraphicsScene(self)
self.aGsMeasureScene .setSceneRect(geometry.x(), geometry.y(), geometry.width(), geometry.height())
self.aGsMeasureScene .setBackgroundBrush(Qt.white)
self.aGvMeasureView = QGraphicsView()
self.aGvMeasureView.setScene(self.aGsMeasureScene )
self.aLayMeasureGrid.addWidget(self.aGvMeasureView)
for i in range(1,5):
rect = QRectF(100*i, 20, 80, 140)
self.addRect(rect,i)
def addRect(self, mRecMeasureBox,mIntMeasureNum):
#label = QLabel("World")
#label.setAlignment(Qt.AlignCenter | Qt.AlignCenter)
wrRectBox = WidRect(mIntMeasureNum,"Meas #" + str(mIntMeasureNum))
### CREA IL PROXY ###
gpqProxMeasure = QGraphicsProxyWidget()
gpqProxMeasure.setWidget(wrRectBox)
gpqProxMeasure.setGeometry(mRecMeasureBox)
self.aGsMeasureScene.addItem(gpqProxMeasure)
### CREA L'OGGETTO GENITORE ###
griMeasure = QGraphicsRectItem(mRecMeasureBox)
#rectangle.setFlag(QGraphicsItem.ItemIsMovable, True)
self.aGsMeasureScene.addItem(griMeasure)
gpqProxMeasure.setParentItem(griMeasure)
if __name__ == "__main__":
app = QApplication(sys.argv)
mgMeasureList = MeasureGrid(QRect(10, 10, 550, 280))
mgMeasureList.show()
app.exec_()
我想补充一点:
我使用代理对象创建矩形,因为在应用程序的最终版本中,它们将是100到300个对象。Mmmh。你是在尝试创建某种“歌曲视图”,对吗?在任何情况下,您都没有向
WidRect
添加任何内容,参数只是实例属性,在QGraphicsView上使用QWidget作为自定义对象通常是毫无意义的,只需创建QGraphicsSitem子类并自行绘制,否则,使用QGraphicsWidget,其布局包含QGraphicsPixmapItem和QGraphicsSimpleTextItem。是的,这是一种歌曲视图。我使用QWidget是因为我必须管理鼠标点击,而我不能用其他方式来做。您能演示如何使用这些类吗?所有QGraphicsItem子类都支持鼠标事件,只需实现MousePresseEvent。好的,我将很快尝试使用这些类!谢谢:)