【发布时间】:2019-04-02 13:44:46
【问题描述】:
我需要用缩放和Qwheel event 绘制一个形状。我试过painter.scale 和painter.translate,但它根本不影响形状的缩放。
这个想法是绘制不同的形状,例如下图上的这个,一个矩形形状,起始值为(200, 300) 看起来很完美,甚至以canvas widget 为中心。但当 (500, 700) 值较大时,如 第二个下图 所示会放大并变得不需要。我想用mouse event 来按比例绘制它并能够(放大和缩小)。
可视化。
代码:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Foo(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Foo, self).__init__(parent)
self.setGeometry(QtCore.QRect(200, 100, 700, 600))
self.paint = Paint()
self.sizeHint()
self.lay = QtWidgets.QVBoxLayout()
self.lay.addWidget(self.paint)
self.setLayout(self.lay)
class Paint(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Paint, self).__init__(parent)
self.setBackgroundRole(QtGui.QPalette.Base)
self.setAutoFillBackground(True)
self._width = 200
self._height = 300
def paintEvent(self, event):
pen = QtGui.QPen()
brush = QtGui.QBrush( QtCore.Qt.darkCyan, QtCore.Qt.Dense5Pattern)
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setPen(pen)
painter.setBrush(brush)
r = QtCore.QRect(QtCore.QPoint((self.width() - self._width)/ 2, (self.height() -self._height)/ 2), QtCore.QSize(self._width, self._height))
painter.drawRect(r)
painter.scale(0.4,0.4)
painter.translate(50, 50)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Foo()
w.show()
sys.exit(app.exec_())
我非常感谢任何帮助。谢谢
【问题讨论】:
-
鼠标事件还是滚轮事件?
-
哪个更灵活?使用轮子事件
标签: python python-3.x pyqt pyqt5 qpainter