mieki256's diary



2012/09/22() [n年前の日記]

#1 [python] Qt Designerを勉強中

Qt Designer 上でツールバーを作る方法が分からなかったのだけど。以下のページで作り方を知った。

_Qt 4.7: Creating Main Windows in Qt Designer
_月の杜工房 - Qt メインウィンドウ

フォーム? フレーム? の上で右クリックして、「ツールバーを追加」を選べば、追加できたのか…。

ツールバー上にボタンを追加する流れとしては、アクションエディタというウインドウにメニューに追加した項目が全部並んでいるので、その中の項目名をツールバー上にD&Dするだけでいいらしい。

メニュー項目、及びツールバーにアイコン画像を表示するには、リソースファイルなるものが必要らしく。これは、リソースブラウザ経由で作ることができる。
  1. リソースブラウザの「リソースを編集」ボタン(鉛筆アイコンのボタン)をクリック。
  2. 「新しいリソースファイル」ボタンを押して、適当な名前でリソースファイル名を指定。resources.qrc とか。
  3. 「プレフィックスを追加」ボタンを押して、適当な名前で以下略。
  4. 「ファイルを追加」ボタンを押して、アイコン画像を追加。
ツールバー上のアイコンサイズは、デフォルトでは24x24が設定されているっぽい。とりあえず、Pythonスクリプトを置いているフォルダに、res/ というフォルダを作成して、その中に入れることにした。アイコン画像は、以下の記事を参考にして入手。

_パブリックドメインや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.qrc
resources.qrc を、resources_rc.py に変換している。pyrcc4 --help でオプションが表示されるのだけど、-compress level なる項目が気になる…。画像を圧縮する際のレベルを指定できる? しかし、どの範囲の値を指定すればいいのか分からない。

とりあえず、Markdownのプレビューはできるようになった。 :

Python 2.7 + PyQt4 + markdown2 で、Markdown を htmlでプレビュー表示できるようになった。とりあえず、ポイントだけメモ。
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 というクラスがあるらしい。指定ミリ秒間隔で処理をする、といったことができる模様。それを使えばフリーズはしなかった。しかし、編集後、プレビューに反映されるまで数秒かかるのは、操作感覚として何かしっくりこない感じで。何かしら打ち込むたびにガンガン更新してくれるほうがしっくりくるような。

以上、1 日分です。

過去ログ表示

Prev - 2012/09 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project