scieditor2 08 version 6
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2 08
190915-
# 検索条件保存
ダイアログ
ほぼ考えてたとおりに実装できたがダイアログの使い方がいまひとつ
このようにダイアログをQDialogの派生クラスとして作るとデザイナーで設定したスロットの収まりが良いのだが、これで正解なんだろうか?
- ダイアログの実装に結構手間がかかった
ほぼ考えてたとおりにできたがダイアログの使い方が難しい
メインルーチンからもいじれるけどデザイナーで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) )
```
- 選択中はその文字数、それ以外は全文字数
- 文字列長はpythonの__len__メソッド
**シンチラの関数ではバイト単位でしか取得できない**
- 選択中はその文字数、それ以外は全文字数を表示する
- 文字列長はpythonの__len__メソッドを使う
**シンチラの関数ではバイト単位でしか取得できないので**
# search back
- 動作を見直した
- forward は next を使わない仕様だがbackはそれが難しくて複雑なコードになってた
backの時だけいったん選択範囲を解除してから実行する仕様にして快適になった
---
---> [scieditor2](https://mimemo.io/m/zeXgworpjz4K0Ek)
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) )
- 選択中はその文字数、それ以外は全文字数を表示する
- 文字列長はpythonの__len__メソッドを使う
シンチラの関数ではバイト単位でしか取得できないので
search back
- forward は next を使わない仕様だがbackはそれが難しくて複雑なコードになってた
backの時だけいったん選択範囲を解除してから実行する仕様にして快適になった
---> scieditor2