我有一个 PyQt5程序,它QGraphic在该字段上绘制一个 -field 和一个椭圆。属性分配给这个椭圆Selectable,当你用鼠标点击它时,它被选中,但我不知道如何处理这个选择。也就是说,当你点击这个椭圆时,会返回一个信号,或者说点击了某个椭圆。
请告诉我,这怎么办?
节目类型:
代码:(所有动作都发生在课堂上FormBuilder)
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QLabel, QHBoxLayout, QVBoxLayout, QLineEdit, QFormLayout, QGroupBox, \
QRadioButton, QMainWindow, QWidget, QGridLayout, QApplication, QGraphicsScene, QGraphicsView, QGraphicsItem
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPen
WINDOW_HEIGHT = 150
WINDOW_WIDTH = 600
WINDOW_NAME = 'QGraphics Test'
class FormBuilder(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.create_qgraphics()
self.create_layers()
def create_qgraphics(self): # создаем и настраиваем QGraph
self.background_graph_scene = QGraphicsScene()
self.brush = QBrush(Qt.green)
self.pen = QPen(Qt.red)
self.graphic_view = QGraphicsView(self.background_graph_scene)
self.graphic_view.setGeometry(0, 0, 10, 10)
# добавляем эллипс для примера и делаем его selectable
ellipse = self.background_graph_scene.addEllipse(20, 20, 50, 50, self.pen, self.brush)
ellipse.setFlag(QGraphicsItem.ItemIsSelectable)
def create_layers(self): # подключаем QGraph к Grid
main_layout = QVBoxLayout(self)
background_image_layout = QHBoxLayout()
background_image_layout.addWidget(self.graphic_view)
main_layout.addLayout(background_image_layout)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.build_skeleton_with_basic_settings()
self.create_and_connect_grid()
def build_skeleton_with_basic_settings(self):
self.setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT)
self.setWindowTitle(WINDOW_NAME)
def create_and_connect_grid(self):
self.main_grid = QGridLayout(self.centralWidget)
form_builder_object = FormBuilder()
self.main_grid.addWidget(form_builder_object, 0, 0, Qt.AlignTop)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())

可接舞台信号
selectionChanged或者,如果您想自己捕捉点击,则创建一个自定义
QGraphicsItem并覆盖mousePressEvent方法