2012/09/22(土) [n年前の日記]
#1 [python] Qt Designerを勉強中
Qt Designer 上でツールバーを作る方法が分からなかったのだけど。以下のページで作り方を知った。
_Qt 4.7: Creating Main Windows in Qt Designer
_月の杜工房 - Qt メインウィンドウ
フォーム? フレーム? の上で右クリックして、「ツールバーを追加」を選べば、追加できたのか…。
ツールバー上にボタンを追加する流れとしては、アクションエディタというウインドウにメニューに追加した項目が全部並んでいるので、その中の項目名をツールバー上にD&Dするだけでいいらしい。
メニュー項目、及びツールバーにアイコン画像を表示するには、リソースファイルなるものが必要らしく。これは、リソースブラウザ経由で作ることができる。
_パブリックドメインやGPLライセンスの高品質なアイコンをパッケージで配布しているOpen Icon Library - かちびと.net
_Open Icon Library - Free/Open Icons
Public Domain package (open_icon_library-PD-0.11.tar.bz2) をDLさせてもらったり。
リソースブラウザにアイコン画像を追加出来たら、アイコンを、アクションエディタの各項目の一番左の空欄の四角までD&Dすると、メニュー及びツールバーにアイコンが反映される。
このままだと、.qrc というファイルとしてリソースファイルが保存されるので、これを PyQt から使えるようにしないといけない。pyrcc4 を使って 〜_rc.py に変換する。
_python - Compiled code does not load image using qrc in pyqt4 - Stack Overflow
_Qt 4.7: Creating Main Windows in Qt Designer
_月の杜工房 - Qt メインウィンドウ
フォーム? フレーム? の上で右クリックして、「ツールバーを追加」を選べば、追加できたのか…。
ツールバー上にボタンを追加する流れとしては、アクションエディタというウインドウにメニューに追加した項目が全部並んでいるので、その中の項目名をツールバー上にD&Dするだけでいいらしい。
メニュー項目、及びツールバーにアイコン画像を表示するには、リソースファイルなるものが必要らしく。これは、リソースブラウザ経由で作ることができる。
- リソースブラウザの「リソースを編集」ボタン(鉛筆アイコンのボタン)をクリック。
- 「新しいリソースファイル」ボタンを押して、適当な名前でリソースファイル名を指定。resources.qrc とか。
- 「プレフィックスを追加」ボタンを押して、適当な名前で以下略。
- 「ファイルを追加」ボタンを押して、アイコン画像を追加。
_パブリックドメインやGPLライセンスの高品質なアイコンをパッケージで配布しているOpen Icon Library - かちびと.net
_Open Icon Library - Free/Open Icons
Public Domain package (open_icon_library-PD-0.11.tar.bz2) をDLさせてもらったり。
リソースブラウザにアイコン画像を追加出来たら、アイコンを、アクションエディタの各項目の一番左の空欄の四角までD&Dすると、メニュー及びツールバーにアイコンが反映される。
このままだと、.qrc というファイルとしてリソースファイルが保存されるので、これを PyQt から使えるようにしないといけない。pyrcc4 を使って 〜_rc.py に変換する。
_python - Compiled code does not load image using qrc in pyqt4 - Stack Overflow
pyrcc4 -o resources_rc.py resources.qrcresources.qrc を、resources_rc.py に変換している。pyrcc4 --help でオプションが表示されるのだけど、-compress level なる項目が気になる…。画像を圧縮する際のレベルを指定できる? しかし、どの範囲の値を指定すればいいのか分からない。
◎ とりあえず、Markdownのプレビューはできるようになった。 :
Python 2.7 + PyQt4 + markdown2 で、Markdown を htmlでプレビュー表示できるようになった。とりあえず、ポイントだけメモ。
今現在、QTextEdit内が修正される度に、毎回、markdown2 で変換 → QWebView でHTML表示、という処理ををしているけれど。長い Markdown ファイルを書いた場合は、たぶん処理が間に合わなくなるであろう予感も。なので、修正を加えてから一定時間入力が無ければ変換・描画更新をする、という仕様にしたほうが良さそうなのだけど。Python の threading.Timer を使ったらスクリプトがフリーズ。どうしたもんか…。
QTimer というクラスがあるらしい。指定ミリ秒間隔で処理をする、といったことができる模様。それを使えばフリーズはしなかった。しかし、編集後、プレビューに反映されるまで数秒かかるのは、操作感覚として何かしっくりこない感じで。何かしら打ち込むたびにガンガン更新してくれるほうがしっくりくるような。
from PyQt4 import QtCore, QtGui, QtWebKit from mywebview import Ui_MyWebView import codecs import markdown2 ... HTML_HEADER = """ <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> </head> <body> """ HTML_FOOTER = """ </body> </html> """ ... def convert_md_to_html(self): """左ウインドウ内のMarkdownをhtmlに変換""" self.md_text = unicode(self.ui.editor_window.toPlainText()) self.html_text = markdown2.markdown(self.md_text) self.html_data = HTML_HEADER + self.html_text + HTML_FOOTER return self.html_data def reload_html(self): """WebViewを更新""" if not self.converting: self.converting = True self.convert_md_to_html() self.ui.my_webview.setHtml(self.html_data) self.converting = Falseエディタ部分の各仕様はまだ全然実装してないので、そのあたりを書かないと。
今現在、QTextEdit内が修正される度に、毎回、markdown2 で変換 → QWebView でHTML表示、という処理ををしているけれど。長い Markdown ファイルを書いた場合は、たぶん処理が間に合わなくなるであろう予感も。なので、修正を加えてから一定時間入力が無ければ変換・描画更新をする、という仕様にしたほうが良さそうなのだけど。Python の threading.Timer を使ったらスクリプトがフリーズ。どうしたもんか…。
QTimer というクラスがあるらしい。指定ミリ秒間隔で処理をする、といったことができる模様。それを使えばフリーズはしなかった。しかし、編集後、プレビューに反映されるまで数秒かかるのは、操作感覚として何かしっくりこない感じで。何かしら打ち込むたびにガンガン更新してくれるほうがしっくりくるような。
[ ツッコむ ]
以上です。