--- Title: web オープンのランチャをまた作る Author: yamasyuh68 Web: https://mimemo.io/m/Mzm71lmw3AGKLYj --- # web オープンのランチャをまた作る URLlauncher https://live.staticflickr.com/65535/49103846032_3d1dc7bdd9_n.jpg 191028 - キーワードが直接アドレスの一部になってるサイトのページ http://*********/*****/**=hoge みたいなのを開くときのために、クリップ監視ソフトを自作してそこからクロームを起動するようにしてある サイトの種類を自動判別するためにキーワード以外の文字列も含めてコピーして使う仕様だった でも最近、キーワードのみでサイトを開きたいケースが増えてきた - scieditor2 には文字列選択してクロームに投げる機能を実装してある サイトのurlをテキストに書いておいて、hogeの部分にキーワードをコピペしてクロームに投げることで何とかしてたんだが、専用のソフトを作りたくなってきた - 与えるのはキーワードだけで、どのサイトを開くかはボタンなどで選択することになる ・常駐のクリップアプリからクリップワードを引数にして呼ぶ ・ボタンの仕組みをどうするか??追加削除が自由なものにしたい ・スクリプト中にボタン名とアドレスをセットで書いてリスト化、ボタン名は動的に設定 ・ボタンは全て一つの関数にコネクトして、その関数でボタンの文字列を取得して分岐させる ``` import sys,subprocess from PyQt5.QtWidgets import QApplication,QWidget ,QMainWindow import untitled class MainWindow(QMainWindow): def __init__(self): super().__init__() self.ui=untitled.Ui_MainWindow() self.ui.setupUi(self) args = sys.argv if len(args) > 1 : self.ui.lineEdit.setText(args[1]) buttons = [ self.ui.pushButton , self.ui.pushButton_2 , self.ui.pushButton_3 ,self.ui.pushButton_4, self.ui.pushButton_5,self.ui.pushButton_6 , self.ui.pushButton_7 ,self.ui.pushButton_8, self.ui.pushButton_9,self.ui.pushButton_10,self.ui.pushButton_11,self.ui.pushButton_12] self.blist = [ ( 'Google' , r'https://www.google.com/search?q={target}' ) , # ( 'hoge' , r'https://hoge/{target}/' ) , # ] self.chrome = r'' for i , l in enumerate( self.blist ) : buttons[i].setText( l[0] ) buttons[i].clicked.connect( self.launchchrome ) def launchchrome( self ) : title = self.sender().text() i = 0 for i , l in enumerate( self.blist ) : if title == l[0] : break target = self.ui.lineEdit.text() url = self.blist[i][1].replace( '{target}' , target ) subprocess.Popen( ( self.chrome , url ) ) if __name__ == "__main__": import sys app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_()) ``` --- 191029 ## URLlauncher 位置を保存する - 位置を変えれないと不便なので Qtのデフォルトのクラスを使ってみた ``` from QtCore import QSettings def closeEvent (self,e) : settings = QSettings("OsamuApp", "URLlauncer") settings.setValue("geometry", self.saveGeometry()) def init(self) :# コード追加 try: settings = QSettings("OsamuApp", "URLlauncer") self.restoreGeometry( settings.value( "geometry" ) ) except : self.setWindowTitle('fail--load setting') ``` - winではレジストリを使う CURRENT_USER\\Software の下にエントリが作成されてた レジストリを汚されるのが嫌で今まで使ってこなかったが、わざわざ設定ファイルを作らなくて良いので簡単で便利ではあります linuxに移ってもこのコードのままで設定保存してくれるようなので良いかもしれない - 保存は単純で良いが読込は初回起動時のことを常に考えなければならないのがやや面倒 ざっくりとtryでくくったがこれでいいのかな ifでエラー回避するよりはtryを使うのが推奨らしいけどなあ 191103 - ずっと放置していたがやはり不便なので「Bye」を実装 191122 - 毎日使ってます(・∀・)ノ 最下行を機能ボタンにして「コピー」「編集」「終了」を割り当てた --- └──>[その他もろもろの開発](https://mimemo.io/m/p5be8G9RdeoWxkE)