2019年2月28日木曜日
Python、PyQt、文字列の一括置換アプリ
今PyQt5で作ってる
このブログで管理してる読書データを置換して見やすくしようと思った。手でも簡単だけどせっかくだからpythonで
ブログの文章をブラウザでコピーしてテキストとして保存、これは手でやる。このファイルから一行づつ読み込んで置換して別ファイルに保存していくのはアプリ
UIはこんな感じ。designerは早い、この程度のダイアログはすぐだ( ´∀`)
前からやりたかったんだけど、正規表現の練習が出来るようにして、成功したらそのパターンを保存出来るようした
正規表現は文書整形には欠かせないものすごいツールだけどやはり記述は難しい。
スクリプトに書いて実行してエラー出して直して、というのでは効率が悪いのでアプリ上でテキストを入力したらリアルタイムで実行結果が出るようにした
変換対象のテキストファイルはドラッグで取得、一行ずつ読み込んで上で成功した正規表現のパターンで置換して新しいファイルに書き出す
正規表現の練習のコーディングが難しいと思ってたけど簡単だった( ´∀`)
正規表現は失敗しても落ちないようにtry~exceptできちんと書く
pythonはファイル処理も簡単だよな
一行づつ抜き出して処理するのは単純にforのinにファイルオブジェクトを渡すだけ
バッチのforと同じだね
消えた女
マイクル・Z. リューインのアルバート・サムソンシリーズ五作目
いつもと同じで色んな人に話を聞いていくうちにどんどん深みにはまっていく展開ですが、閉じた世界の話で謎が謎を呼び、かなりのノンストップ系になってる。
つまり面白いって事です。
どんでん返しも二枚腰でダマされと思ったらまだ先がありました。
しっかりしたミステリで、それぞれの人間の想も詰まっている。
私としては1作目のA型の女にやられた感があったけど、匹敵する完成度だと思う。
ようやく彼女とその娘さんが出てきました
事務所も変わって大家さんは一癖ありそうだし、これからの展開がすごく楽しみ
しかし読書メーターを見たら読者数はすごく少ない
どうしてかね、面白いのに┐('д')┌
コンプまであと三作、終わったら他の作品も読みたい( ´∀`)
童貞物語
コンプするつもりで借りた佐藤正午さんの初期の作品
やっぱ文章が上手いなあと思う
プロの作家なら当たり前かもしれないけど、こういうのは勿論訓練もあるんだろうが持って生まれたものですよね
言い回しにひねくれたところが無くて読みやすいです
村上龍の69を思い出した
佐藤版の青春グラフィティって感じかな
海藤が佐藤さんなのかなと思いながら読んだが、津田臭さはまだないですね( ´∀`)
私はこの手の作品にはちょっと弱くて、最後はぐっときました
佐藤さんの作品は純粋にお話として楽しむ、作者の意図とか想いとかそういうのはナシ、のつもりだったけど、本作はちょっと違った
というか、胸に来るものがあって嬉しかった
村上龍だけど、勿論69が先だよなあと思ってちょっと調べたら両方とも1987年の出版だった!!!
才能が溢れて漏れ出てきそうな感じだった村上龍は芥川賞を1976年に獲ってる
佐藤さんは1983年にすばる文学賞を獲って、それ以降こつこつと作家活動を続けてようやく直木賞を獲った
私は若い頃は村上龍にはまった時期があって結構読んだけど最近は読みたいと思いません
まあ、いろいろですね
2019年2月26日火曜日
Python、マルチスレッド 2
このやり方でマルチスレッド自体はうまく動いてるようだ
PCのシステムモニタで見てもpythonは二つになってる(・∀・)ノ
しかし、どうもうまくいかない
本体は固まってはいないけど、アウトプットの更新がやはりリアルタイムにならない
変なのは、VSCodeから起動するとうまくいくけど、単独で起動するとうまくいかないこと
VSCodeのコンソールを見ると微妙にQTがエラーを吐いてる
QObject::connect: Cannot queue arguments of type 'Qstring・・・・
それはキュー出来ないよ????
ちょっと調べたらマルチスレッド系のエラーらしく解決方法がよくわからん
pythonではなくQTのえらーっぽい
もともと標準出力を受け取るとバイト型になってる
すぐprintしてしまえば、コンソールには
b'\r\n0'
みたいに表示してくれるけど、直接QTのテキストwidgetに入れるとstringにしてくれってエラーになる
なので、.decode() でutf-8に変換してからテキストwidgetに送ってる
変換の仕方が悪いのか、そもそもthread間のやりとりが難しいのか????
もう少し調べるか?
スクリプトでここまで出来れば十分かもしれないが・・・( ̄― ̄?)
Python、マルチスレッド
コンソールアプリを実行して標準出力を取得するGUIベースの汎用アプリを作った(前の記事の画像に写ってるやつね)
昔Cで作ったんだけど勉強含めてpythonへの移植的に
コマンドの与え方など、使いづらかったので当然手直しして
で、出来たんだけど、子プロセスからの出力に時間がかかる場合はメインダイアログが固まる
ffmpegでごちゃごちゃやってるときなど、全て終わってから一気に表示される
まあ良いんだけどやっぱ固まってると不安ですよね
これを解決するのは多分マルチスレッドだと思い調べてみたら簡単そうだった
問題はスレッドを作るにしても今の開発環境は基本的にdesignerで作ったダイアログクラスがメインになっていて、どこでどうスレッドを作れば良いのかってことです
現状は、サブプロセス実行は外で関数化して、メインクラスの中から呼んでいる
外の関数で標準出力を取得してyieldしてもらい、これをクラスの中でもらって出力ウインドウにセットしてる
クラスの中はyield待ちのループになってるんで、yieldが終わるまで固まってると思われる
で、こうしてみた
①def go: #ここは変わらない、サブプロセス実行
subprocess(ここで実行して標準出力取得して送る)
pipe=stdout
yield pipe
②def test: #ここから別スレッド
(text_cmd からtext取得して実行する)
for ***** in( go()) :
text_out.append
③class *** # メインダイアログのクラス
def *** # プロセス実行関数 ここでスレッドを作る
thread_obj = threading.Thread(target=test, args...)
thread_obj.start()
新しく作るのは②だけかな
①と②は一つにまとめても良いね
別関数にしてyield、ってのが良い感じだなって思うけど( ´∀`)
2019年2月24日日曜日
Visual Studio Code

VSCodeすごく良い
ショートカット覚えたらたまらん
たとえばコメントだけど、ラインコメントはあるけどコメント群は書きづらい
と、思ってたんだけど、行を選択して
ctr+/
で一発だったんだなあ~( ´∀`)
これならラインコメントだけで十分ですね
行をそっくり下にコピーとか、単語の選択とかインデントの上げ下げとか
今まで手でやってたことがショートカット一発だ!!
普通のプログラム書きは皆こうしてたんだろうな
知らないって幸せだったり哀しかったりしますね( ̄― ̄?)
しかしふと気づいたが、これってCUIの世界ですよね
ワタシはMSは大嫌いですけど、パソコンにマウスを導入してGUIの世界を開いたのはやはりMSであり、そこは素直に素晴らしい業績だと思ってます
そのMSがCUIなツールを作ってるとは・・・・(・∀・)
PyQT、Qlistview と Qlistwidget

QTではいろんなオブジェクトがあってわかりづらいなあって話です
私は単純な1列のリストを作りたくて探したんだけどよくわかんない
win32apiでいうとListBoxですね
QTだとListViewしかないのかな・・・?
で、それにも種類があって表題の①Qlistview と ②Qlistwidget
この二つの違いはデータのセットの仕方、②の方が簡単です( ´∀`)
①はデータ用にQStandardItemModelを作ってそこにデータを入れてから、①にセットします
②はそんなこと考えずにデータを次から次とaddItemしていけば良い
しかし、②は①の派生クラスなので、元は同じ
①の面倒なところを簡単にした(機能を追加した)のが②です
じゃあちょっと使うだけなら②でいいじゃん、って事ですが、①の機能を使いたくなることもある
そういう場合は①に戻す必要は無く、①の機能は当然②も備えてるので使えます
ただし、プログラマーはその事を知っておく必要があるって事ですね
designerだと、左のパーツのところに①②両方あってどっちを使うべきか迷います
配置した後でも、右クリックで「morph into」ってすると、簡単に変更できます
変更できるんですけど、今の例だと、②なら①に変更する必要は無いです
機能が減るだけなので
で、どっちを使うべきなんだろ?
②の方が便利ということなら①の存在意味は無いからいっそ無くして欲しい
でも①の前に⓪もあるらしい
ワタシ的には派生してごちゃごちゃになったクラスは使いたくないんですよ
元のクラスの方が使いづらくてもたとえばシンプルで早いんならそっちを使いたい
で、どうなんでしょう
どっちを使うべきなの???
答え出てないです~(・∀・)ノ
Qtはdesignerがものすごく良くてRADかもしれないけど調べ出すと時間かかるね
言語としてのpythonを勉強することは正解だと思うけど、GUIで何を使うかは難しい
Qtを調べて少しわかってきてもどこか虚しい( ̄― ̄?)
どうせ詳しくなるならGTKの方が汎用性アリかなとか、思ってしまいます
登録:
投稿 (Atom)
