画像にパスを加えるツール 2 version 3

2019/07/24 23:47 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
190724
- 簡易grepは完璧だった
これで十分いけるわ、GUI必要ないかな
- locale 調べました
```
>>> import locale
>>> locale.getpreferredencoding(False)
'cp932'
```
MSだからなあ、こういうことか
デフォルトは932にした方がいいんだろうか??
悩ましい・・・

- パスファイルのビューア
https://live.staticflickr.com/65535/48364789566_b5abd605e0.jpg
```
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_())

```

- Transform 実装できた

```
    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
```
      
  • 簡易grepは完璧だった
    これで十分いけるわ、GUI必要ないかな
  • locale 調べました
>>> import locale
>>> locale.getpreferredencoding(False)
'cp932'

MSだからなあ、こういうことか
デフォルトは932にした方がいいんだろうか??
悩ましい・・・

  • パスファイルのビューア
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_())

  • Transform 実装できた
    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