190724
import sys , os,glob
from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsScene, QGraphicsView,
QGraphicsDropShadowEffect ,QGraphicsPathItem )
from PyQt5.QtGui import QPixmap , QColor , QPainterPath ,QPen,QBrush
from PyQt5.QtCore import Qt,QSizeF ,QPoint,QPointF ,QDataStream,QIODevice,QDataStream,QFile
class PathView(QGraphicsView):
def __init__(self, parent=None):
super( PathView, self).__init__(parent)
self.setGeometry(500,100,300,400)
self.setScene(QGraphicsScene(self))
self.item=[] # sceneItem
fname=os.path.join(os.path.dirname(__file__) , '*.qpath')
for l in glob.iglob(fname , recursive=True) :
f = QFile(l)
f.open( QIODevice.ReadOnly)
ds = QDataStream(f)
path=QPainterPath()
ds.__rshift__(path)
f.close()
self.item.append( [self.scene().addPath( path,brush = QBrush(Qt.red)) , l ] )
size=(80,80)
ratio=0
ii=0
for i,l in enumerate( self.item ) :
rect= l[0].boundingRect ()
ratio = min( size[0] / rect.width() , size[1] / rect.height() )
l[0].setScale( ratio )
ii = int(i / 3) # 横3つまで、ii は行数になる
l[0].setPos( (i%3)*size[0] , ii*size[1] )
l[0].setFlag(QGraphicsItem.ItemIsSelectable,1)
self.scene().selectionChanged.connect(self.selectionChanged)
self.selected=None
def selectionChanged(self):
p=self.scene().selectedItems()
if len(p) >= 1 :
p=p[0]
for l in self.item :
if p==l[0] :
self.setWindowTitle(l[1])
app = QApplication(sys.argv)
window = PathView()
window.show()
sys.exit(app.exec_())
def keyPressEvent(self, event):
if (event.modifiers() & Qt.ControlModifier): # ctrl
if (event.key() == Qt.Key_Up):
self.y += 0.1
elif (event.key() == Qt.Key_Down):
self.y -= 0.1
elif (event.key() == Qt.Key_Q):
self.setPath( self.original )
self.y=1
return
elif (event.key() == Qt.Key_Right):
self.x += 0.1
elif (event.key() == Qt.Key_Left):
self.x -= 0.1
qt = QTransform()
qt.scale( self.x, self.y )
self.setPath( qt.map( self.original ) )
return
190729
190730