Skip to content

Instantly share code, notes, and snippets.

@fereria
Created July 15, 2019 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fereria/0dddec2510428ede7a8fab07963c1ac3 to your computer and use it in GitHub Desktop.
Save fereria/0dddec2510428ede7a8fab07963c1ac3 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import sys
import os
import os.path
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtUiTools import QUiLoader
ZOOM_MIN = -0.5
ZOOM_MAX = 2
class UISample(QtWidgets.QDialog):
def __init__(self, parent=None):
super(UISample, self).__init__((parent))
self.view = NodeView()
layout = QtWidgets.QVBoxLayout()
self.setLayout(layout)
layout.addWidget(self.view)
self.scene = NodeScene()
self.view.setScene(self.scene)
item = self.scene.addEllipse(150, 150, 200, 100)
item.setBrush(QtGui.QBrush(QtGui.QColor('pink')))
class NodeView(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(NodeView, self).__init__(parent)
def wheelEvent(self, e):
delta = e.delta()
adjust = (delta / 120) * 0.1
self.set_zoom(adjust)
def set_zoom(self, value):
scale = 0.0
# 今のズーム率 指定外にはならないようにする
zoom = self.get_zoom()
if ZOOM_MIN >= zoom:
if value < 0.0:
return
if ZOOM_MAX <= zoom:
if value > 0.0:
return
scale = 0.9 if value < 0.0 else 1.1
self.scale(scale, scale)
def get_zoom(self):
transform = self.transform()
cur_scale = (transform.m11(), transform.m22())
return float('{:0.2f}'.format(cur_scale[0] - 1.0))
class NodeScene(QtWidgets.QGraphicsScene):
sel_item = None
def __init__(self, parent=None):
super(NodeScene, self).__init__(parent)
def mousePressEvent(self, e):
if e.button() == QtCore.Qt.LeftButton:
self.sel_item = self.itemAt(e.scenePos(), QtGui.QTransform())
self.mouse_pos = e.scenePos()
def mouseMoveEvent(self, e):
if self.sel_item is not None:
cur = e.scenePos()
val = cur - self.mouse_pos
self.sel_item.moveBy(val.x(),val.y())
self.mouse_pos = cur
def viewer(self):
return self.views()[0] if self.views() else None
def mouseReleaseEvent(self, e):
self.mouse_pos = None
self.sel_item = None
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
a = UISample()
a.show()
sys.exit(app.exec_())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment