scieditor2 3 version 11

2019/08/23 17:21 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2 3
190820
# 読込ブラウザ
- 連番のテキストファイルは内容がわからないのでプレビューした上で開けるようにブラウザ的なものを考えて作ってみた
- リストビューをアイコンモードにして画像をsetDataしてみた
画像はアイコンだけで無くpixmapでもイケた
QImageにdrawTextしてやればプレビューになる
これを基本にしてエディタに組み込んでみよう
- テキストの折り返しはどうするのだろう??

https://live.staticflickr.com/65535/48584822647_24a2c5edbf.jpg

```

from PyQt5 import QtCore, QtGui, QtWidgets 
import ui_sumnail
from PyQt5.QtWidgets import QApplication,QWidget ,QMainWindow
from PyQt5.QtGui import  QStandardItem ,QStandardItemModel,QPixmap,QIcon,QImage,QPainter
from PyQt5.QtCore import Qt , QSize,QPointF

class MainWindow(QMainWindow):                     # <===QMainWindowの派生クラスとして作る
    def __init__(self):
        super().__init__()
        self.ui=ui_sumnail.Ui_MainWindow()
        self.ui.setupUi(self)
        self.loaddata()
        self.ui.listView.setIconSize(QSize(100,100))
        self.ui.listView.setSpacing(5)

    def loaddata(self):
        ic=r'<fullpath>.png'
        model = QStandardItemModel()
        self.ui.listView.setModel(model)

        id=QStandardItem('chrome.png')
        model.appendRow(id)
        model.setData( model.index(0,0) , QIcon(ic) , Qt.DecorationRole )

        id=QStandardItem('wahaha.png')
        model.appendRow(id)
        img=QImage(ic)
        # img=QImage(100,100,QImage.Format_Mono)
        paint=QPainter()
        paint.begin(img)
        paint.drawText( QPointF(0,10) , 'hogetta 描画できたぞ こんな感じで良いかいな')
        paint.end()
        # model.setData( model.index(1,0) , QIcon( QPixmap.fromImage(img)) , Qt.DecorationRole )
        model.setData( model.index(1,0) , QPixmap.fromImage(img) , Qt.DecorationRole )


    def go(self):
        print('')

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

```

- designer
```
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui_sumnail.ui'
#
# Created by: PyQt5 UI code generator 5.12
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(296, 346)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setViewMode(QtWidgets.QListView.IconMode)
        self.listView.setObjectName("listView")
        self.verticalLayout.addWidget(self.listView)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 296, 17))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

```

---
190812
# ファイルの読込プレビューブラウザ

- 実験してうまくいったので本体に実装、ダブルクリックで開くところまでできた
todoとしてはフォルダの変更と拡張子のフィルタ、ファイルの削除を実装したい
- 時間がかかったのはdesignerの操作
designerは配置したウィジェットを別な物に変える場合の操作が難しい
今回はツリーウィジェットをタブに差し替えたかった
方法がわからないのでいつもレイアウトを一旦解除しているので結構大変
- いままで自動で大きさを変えるのが難しかったが何となくわかってきた
- インストがうまくいってないのかマニュアルが見れない状態で、designerの正しい使い方が今ひとつわからないけど、GUIツールとしては貴重だと思います

---
190822
- アウトラインツリーの不具合はdesignerで設定したスロットが消えていたためだった
勿論消した覚えは無かったんだけどね~┐('д')┌

- 保存のコードを確認した
自分で書いたコードだけどほとんど覚えてない(・∀・)ノ
```
        self.SendScintilla(self.SCI_GETTEXT , size+1 , s)

        s=s.value.decode(errors='replace')
        # with open(fname,'wb')  as f :# 書き込み専用
        with open(fname,'w', encoding = enc ,errors='replace',newline = '')  as f :# 書き込み専用
            f.write(s)
```

- シンチラから文書をもらったあと、デコードしてさらに保存の時にエンコード指定していて、なにやら無駄感が
試しに、デコードをそもそもやめてファイル保存の時バイナリにしてみたら、普通にu-8のテキスト文書として開けた(・∀・)ノ
- シンチラからもらったデータはu-8のテキストデータだったわけです、当然かもしれないけど
しかし形式上このデータはバイナリなんだよ、受けのバッファをctypesのバイナリにしてるから。ここをテキストバッファにすりゃあ良いのかな

----
----> [scieditor2](https://mimemo.io/m/zeXgworpjz4K0Ek)      

190820

読込ブラウザ

  • 連番のテキストファイルは内容がわからないのでプレビューした上で開けるようにブラウザ的なものを考えて作ってみた
  • リストビューをアイコンモードにして画像をsetDataしてみた
    画像はアイコンだけで無くpixmapでもイケた
    QImageにdrawTextしてやればプレビューになる
    これを基本にしてエディタに組み込んでみよう
  • テキストの折り返しはどうするのだろう??


from PyQt5 import QtCore, QtGui, QtWidgets 
import ui_sumnail
from PyQt5.QtWidgets import QApplication,QWidget ,QMainWindow
from PyQt5.QtGui import  QStandardItem ,QStandardItemModel,QPixmap,QIcon,QImage,QPainter
from PyQt5.QtCore import Qt , QSize,QPointF

class MainWindow(QMainWindow):                     # <===QMainWindowの派生クラスとして作る
    def __init__(self):
        super().__init__()
        self.ui=ui_sumnail.Ui_MainWindow()
        self.ui.setupUi(self)
        self.loaddata()
        self.ui.listView.setIconSize(QSize(100,100))
        self.ui.listView.setSpacing(5)

    def loaddata(self):
        ic=r'<fullpath>.png'
        model = QStandardItemModel()
        self.ui.listView.setModel(model)

        id=QStandardItem('chrome.png')
        model.appendRow(id)
        model.setData( model.index(0,0) , QIcon(ic) , Qt.DecorationRole )

        id=QStandardItem('wahaha.png')
        model.appendRow(id)
        img=QImage(ic)
        # img=QImage(100,100,QImage.Format_Mono)
        paint=QPainter()
        paint.begin(img)
        paint.drawText( QPointF(0,10) , 'hogetta 描画できたぞ こんな感じで良いかいな')
        paint.end()
        # model.setData( model.index(1,0) , QIcon( QPixmap.fromImage(img)) , Qt.DecorationRole )
        model.setData( model.index(1,0) , QPixmap.fromImage(img) , Qt.DecorationRole )


    def go(self):
        print('')

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

  • designer
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui_sumnail.ui'
#
# Created by: PyQt5 UI code generator 5.12
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(296, 346)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setViewMode(QtWidgets.QListView.IconMode)
        self.listView.setObjectName("listView")
        self.verticalLayout.addWidget(self.listView)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 296, 17))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


190812

ファイルの読込プレビューブラウザ

  • 実験してうまくいったので本体に実装、ダブルクリックで開くところまでできた
    todoとしてはフォルダの変更と拡張子のフィルタ、ファイルの削除を実装したい
  • 時間がかかったのはdesignerの操作
    designerは配置したウィジェットを別な物に変える場合の操作が難しい
    今回はツリーウィジェットをタブに差し替えたかった
    方法がわからないのでいつもレイアウトを一旦解除しているので結構大変
  • いままで自動で大きさを変えるのが難しかったが何となくわかってきた
  • インストがうまくいってないのかマニュアルが見れない状態で、designerの正しい使い方が今ひとつわからないけど、GUIツールとしては貴重だと思います

190822

  • アウトラインツリーの不具合はdesignerで設定したスロットが消えていたためだった
    勿論消した覚えは無かったんだけどね~┐('д')┌

  • 保存のコードを確認した
    自分で書いたコードだけどほとんど覚えてない(・∀・)ノ

        self.SendScintilla(self.SCI_GETTEXT , size+1 , s)

        s=s.value.decode(errors='replace')
        # with open(fname,'wb')  as f :# 書き込み専用
        with open(fname,'w', encoding = enc ,errors='replace',newline = '')  as f :# 書き込み専用
            f.write(s)
  • シンチラから文書をもらったあと、デコードしてさらに保存の時にエンコード指定していて、なにやら無駄感が
    試しに、デコードをそもそもやめてファイル保存の時バイナリにしてみたら、普通にu-8のテキスト文書として開けた(・∀・)ノ
  • シンチラからもらったデータはu-8のテキストデータだったわけです、当然かもしれないけど
    しかし形式上このデータはバイナリなんだよ、受けのバッファをctypesのバイナリにしてるから。ここをテキストバッファにすりゃあ良いのかな

----> scieditor2