我想用PyQt用Python编写一个简单的程序。
我有一个QGraphicsScene,我想做以下事情: 使用两个RadioButtons有两个选项:
我在PyQt和GUI编程方面都是新手。我的主要问题是我真的不明白鼠标事件在Qt中是如何工作的。 如果某人如此善良和耐心地向我解释鼠标事件的基本知识并给我一些上述问题的窍门,我将非常感激。
我也附上了一张照片,以便将问题直观化。
我试图解决这个问题。为了放置小部件,我使用了Qt Designer,然后创建了一个名为SimpleWindow的子类。
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QPen, QBrush
from PyQt5.QtWidgets import QGraphicsScene
import points
class SimpleWindow(QtWidgets.QMainWindow, points.Ui_Dialog):
def __init__(self, parent=None):
super(SimpleWindow, self).__init__(parent)
self.setupUi(self)
self.graphicsView.scene = QGraphicsScene()
self.graphicsView.setScene(self.graphicsView.scene)
self.graphicsView.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.graphicsView.mousePressEvent = self.pixelSelect
def pixelSelect(self, event):
pen = QPen(QtCore.Qt.black)
brush = QBrush(QtCore.Qt.black)
x = event.x()
y = event.y()
if self.radioButton.isChecked():
print(x, y)
self.graphicsView.scene.addEllipse(x, y, 4, 4, pen, brush)
if self.radioButton_2.isChecked():
print(x, y)
app = QtWidgets.QApplication(sys.argv)
form = SimpleWindow()
form.show()
app.exec_()
这是Designer生成的类:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(538, 269)
self.graphicsView = QtWidgets.QGraphicsView(Dialog)
self.graphicsView.setGeometry(QtCore.QRect(130, 10, 371, 221))
self.graphicsView.setObjectName("graphicsView")
self.radioButton = QtWidgets.QRadioButton(Dialog)
self.radioButton.setGeometry(QtCore.QRect(20, 30, 82, 31))
self.radioButton.setObjectName("radioButton")
self.radioButton_2 = QtWidgets.QRadioButton(Dialog)
self.radioButton_2.setGeometry(QtCore.QRect(20, 80, 82, 17))
self.radioButton_2.setObjectName("radioButton_2")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.radioButton.setText(_translate("Dialog", "Generate"))
self.radioButton_2.setText(_translate("Dialog", "Select"))
谢谢。
答案 0 :(得分:2)
在QGraphicsView
中添加QGraphicsScene
,每个人都管理不同坐标的系统。 QGraphicsView
类似于相机,而QGraphicsScene
与世界类似,当一个项目添加到场景中时,它必须位于其坐标系中。
由于您要在点击时添加项目,最好覆盖mousePressEvent
的{{1}}方法,并获取QGraphicsScene
的场景坐标中的位置使用方法。
要做的另一件事是初始化属性scenePos()
,这是setSceneRect()
可以看到的空间。
如果使用多个按钮,建议使用QGraphicsView
映射按钮,以便轻松处理信号。
QButtonGroup