【发布时间】:2018-09-16 03:13:54
【问题描述】:
下面显示的 QgraphicsView 和 QMainWindow 类的当前设计是我在不同软件中的设计示例。
我必须向 QGraphicsView 添加滚动条。 原版软件的所有鼠标事件都在 QMainWindow 中处理。
问题:通过QMainWindow在QGraphicsView上画图的方法是什么?
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Window(QtGui.QGraphicsView):
def __init__(self, parent=None):
QtGui.QGraphicsView.__init__(self, parent)
self.scene = QtGui.QGraphicsScene(self)
self.scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.darkGray, QtCore.Qt.SolidPattern))
self.setScene(self.scene)
#self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag)
self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
#self.viewport().setCursor(QtCore.Qt.CrossCursor)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
print "sdsads"
def mousePressEvent(self, ev):
item = QtGui.QGraphicsTextItem("")
item.setPos(ev.x(), ev.y())
self.scene.addItem(item)
print "ev.x() ", ev.x()
class CityscapesLabelTool(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
centralwidget = Window()
self.setCentralWidget(centralwidget)
centralwidget.scene.addPixmap(QtGui.QPixmap("exit.png"))
app = QtGui.QApplication(sys.argv)
GUI = CityscapesLabelTool()
GUI.show()
sys.exit(app.exec_())
【问题讨论】:
-
draw是什么意思,要不要一边拖动鼠标一边画线?
-
对不起,我的意思是在屏幕上画一个点,在屏幕上画多边形。所有这些都应该通过点击屏幕来完成。 @eyllanesc
-
我的意思是,我明白每次你按下一个点,那个点都会成为多边形的一部分,因为它表明多边形应该已经完成了?
-
@eyllanesc 很抱歉,但我真的不明白这句话的意思。
as it is indicated that the polygon should be finished already。实际上绘制的部分已经在 QMainWindow 类中完成了。我只需要将鼠标单击放在 GraphicsView 类上,这样 QMainWindow 就能够绘制它正在绘制的任何内容 - 这次是在 graphicsview 上。 -
它不是在QGraphicsView中绘制的,只是为了添加项目,我的问题是你如何表示你要绘制一个三角形,一个四边形,即边数。
标签: python qt pyqt qgraphicsview qmainwindow