scieditor2 08

190915-

検索条件保存

  • ダイアログの実装に結構手間がかかった
    ほぼ考えてたとおりにできたがダイアログの使い方が難しい
    メインルーチンからもいじれるけどデザイナーでUIを作るのなら、メイン → QDialogの派生クラス → UI呼び出し、の順にした方がスムースだと思う
  • しかしダイアログを作るたびにuiファイルは別にしなくちゃいけないのだろうか??
  • Scintilla.py
class MainWindow(QMainWindow):
    def searchsave(self):
        text=QInputDialog.getText(self,r'( ´∀`)','set Name')
        if text[1]:
            self.db.searchsave((text[0] ,self.ui.lineEdit.text() , self.ui.lineEdit_3.text()))
    def searchload(self): # Show Dialog
        self.sdlg=searchdlg(self)

class searchdlg(QDialog): # Dialog for search data load 
    def __init__(self,parent):
        super().__init__()
        self.parent=parent
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.result=self.parent.db.searchload()
        if self.result:
            for l in self.result :
                self.ui.listWidget.addItem(l[0]) 
        self.show() 

    def listDClicked(self,item):
        id=item.listWidget().row(item)
        self.parent.ui.lineEdit.setText( self.result[id][1])
        self.parent.ui.lineEdit_3.setText( self.result[id][2])

    def listSelect(self,item):
        id=item.listWidget().row(item)
        self.ui.label.setText(self.result[id][1])
        self.ui.label_2.setText(self.result[id][2])

    def delitem(self):
        self.parent.db.searchdell(self.ui.listWidget.currentItem().text())
        # print(self.ui.listWidget.currentItem().text())
  • Scintilla_sql.py
    def searchload( self ): # search pattern
        conn = sqlite3.connect( self.db )
        c = conn.cursor()
        c.execute( 'select  *  from  spattern' )
        res=c.fetchall()
        c.close()
        conn.close()
        return res     # 結果を全て渡す、タプルのリスト
    def searchsave( self , lists ):
        conn = sqlite3.connect( self.db )
        c = conn.cursor()
        c.execute( "INSERT INTO spattern ( name , word , replace ) VALUES (?,?,?)" , lists )
        c.close()
        conn.commit()
        conn.close()
    def searchdell( self , key ):
        conn = sqlite3.connect( self.db )
        c = conn.cursor()
        c.execute( "DELETE FROM spattern WHERE name= ?" , (key,) )
        c.close()
        conn.commit()
        conn.close()
  • sql もいじる
    データベースを開いて閉じる部分は共通なので一つにしたいが何となく書きづらいんだよなあ

お気に入りに区切り線をつけた

たくさん詰め込むと見づらいので
コーディングはダブルクリックでファイルと間違って開かないようにしただけ

文字数カウント

    def charcount(self):                      # 文字数カウント F3
        mes=self.selectedText().__len__() if self.hasSelectedText() else self.text().__len__()
        self.message.emit( '文字数 : {:,}'.format(mes) )
  • sci の派生クラスに実装、選択中はその文字数、それ以外は全文字数を表示する
  • 文字列長はpythonの__len__メソッドを使う
    シンチラの関数ではバイト単位でしか取得できないので

search back

  • forward は next を使わない仕様だがbackはそれが難しくて複雑なコードになってた
    backの時だけいったん選択範囲を解除してから実行する仕様にして快適になった

190917

ステータスバーの再実装

  • 情報表示は結構大事なのですっきりしたくてクラス化した
    再コーディングがメインで個別の機能はほぼ実装済み
    構想に時間がかかったけど実装自体は計画通りで簡単だった
  • アウトラインのビュー化も早くやっておきたいんだけどなあ・・・

もろもろ

ファイルロードタブを開いたときにロード

tabchange にスロット設定してとかいろいろやったがうまくいかず、結局このクラスのコンストラクタからloadを呼ぶことで解決した
一行追加しただけで簡単だった ┐('д')┌

行単位検索手直し

case sensitive だったので lower() に合わせた
このテクは foobarAlt で調べてたものだった
もう忘れてたんだなあ・・・┐('д')┌

高速化の実験 numba

  • cython は難しそうなので numba をインストして試してみた
    enhancer で画質調整する際、画像が少し大きくなると劇的に動作が遅くなっていたのでまずはこれで実験
  • 動作はしたが普段より時間がかかった┐('д')┌
    二回目は少し早いかな?
    コンパイルするようだが事前に中間ファイルを作るわけでは無く起動のたびに実行するようだ
    これだと使えないぞ
    私の使い方が間違ってるのかなあ
  • ちなみに関数単位で @jit するが、エラーではじかれる関数もあった
    今はダメだけど将来の更新に期待してね、見たいなメッセージが出て笑った
  • 真剣に Cython を勉強するか??

---> scieditor2

END

Close