--- Title: scieditor2 3 Author: yamasyuh68 Web: https://mimemo.io/m/EQ5qglgap1GLNn9 --- 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'.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)