
| ■ | PyQt湯けむりウィジェットツアー(第5弾) |
(*1)ただし、Qtの開発陣のコメントによれば、 彼らはQtで本物のWebブラウザを作ってしまおうとしているわけではなく、 あくまでアプリケーションの高機能なヘルプをHTMLで記述できるようにとの意図で HTMLのリッチテキストビューアを作っている、ということのようです。
| ■ | QTextView |
#! /usr/local/bin/python
import sys
from qt import *
class HelloWidget(QWidget):
def getSource(self, filename):
fin = open(filename, "r")
a = fin.read()
fin.close()
codec = QTextCodec.codecForName("eucJP")
return codec.toUnicode(a)
def __init__(self, *args):
apply(QWidget.__init__, (self,) + args)
self.setCaption(self.tr("テストだ"))
tbra = self.tbra = QTextView(self)
cmda = self.cmda = QPushButton(self.tr("終了"), self)
msf = self.msf = QMimeSourceFactory()
msf.setExtensionType("html", "text/html;charset=eucJP")
msf.setExtensionType("htm", "text/html;charset=eucJP")
a = QStringList(".")
a.append("/win32/Wintools/Python20/Doc")
msf.setFilePath(a)
tbra.setMimeSourceFactory(msf)
a = self.getSource("/win32/Wintools/Python20/Doc/index.html")
tbra.setText(a)
self.resize(600, 400)
tbra.setGeometry(10, 10, 580, 340)
cmda.setGeometry(520, 368, 60, 24);
self.connect(self.cmda, SIGNAL("clicked()"), self.close)
a = QApplication(sys.argv)
codec = QTextCodec.codecForName("eucJP")
a.setDefaultCodec(codec)
w = HelloWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.
|
QTextViewと切り離せない関係にあるのが QMimeSourceFactoryです。 これは表示したいコンテンツの出所や性質などの情報をひとまとめに設定するもので、 大きな役割として
tbra = self.tbra = QTextView(self)
msf = self.msf = QMimeSourceFactory()
msf.setExtensionType("html", "text/html;charset=eucJP")
msf.setExtensionType("htm", "text/html;charset=eucJP")
a = QStringList(".")
a.append("/win32/Wintools/Python20/Doc")
msf.setFilePath(a)
tbra.setMimeSourceFactory(msf)
拡張子の対応づけは、
QMimeSourceFactoryのsetExtensionType()\
で行います。通常は、上のように、拡張子htm、htmlと「charset」
指定つきのtext/htmlを関連づけることになるでしょう。実際のファイルの内容の表示は、次のようにして行います。
def getSource(self, filename):
fin = open(filename, "r")
a = fin.read()
fin.close()
codec = QTextCodec.codecForName("eucJP")
return codec.toUnicode(a)
a = self.getSource("/win32/Wintools/Python20/Doc/index.html")
tbra.setText(a)
| ■ | QTextBrowser |
#! /usr/local/bin/python
import sys
from qt import *
class HelloWidget(QWidget):
def __init__(self, *args):
apply(QWidget.__init__, (self,) + args)
self.setCaption(self.tr("テストだ"))
tbra = self.tbra = QTextBrowser(self)
cmda = self.cmda = QPushButton(self.tr("終了"), self)
# これ、まじでQtのマニュアルが表示できます。すげー!!
# ファイルシステムをリンクでたどれるようにしてみる
msf = self.msf = QMimeSourceFactory()
msf.setExtensionType("html", "text/html;charset=eucJP")
msf.setExtensionType("htm", "text/html;charset=eucJP")
tbra.setMimeSourceFactory(msf)
a = QStringList(".")
a.append("/usr/local/qt-2.3.1/doc/html")
a.append("../../../doc")
msf.setFilePath(a)
#tbra.setSource("tix11.html")
tbra.setSource("classes.html")
#tbra.setText(self.getSource("/usr/local/qt/doc/html/classes.html"))
self.resize(600, 400)
tbra.setGeometry(10, 10, 580, 340)
cmda.setGeometry(520, 368, 60, 24);
self.connect(self.cmda, SIGNAL("clicked()"), self.close)
a = QApplication(sys.argv)
codec = QTextCodec.codecForName("eucJP")
a.setDefaultCodec(codec)
w = HelloWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.
|
QTextBrowserも実はそんなに難しいことはありません。 QMimeSourceFactory の使い方はQTextViewの場合と同じで、 QTextBrowser.setSource()を使ってHTML文書を読み込んで表示します。 そのHTML文書がリンクを含む場合、画面をつついてみましょう。 ちゃんとジャンプできたら大成功です。
msf = self.msf = QMimeSourceFactory()
msf.setExtensionType("html", "text/html;charset=eucJP")
msf.setExtensionType("htm", "text/html;charset=eucJP")
tbra.setMimeSourceFactory(msf)
a = QStringList(".")
a.append("/usr/local/qt/doc/html")
msf.setFilePath(a)
tbra.setSource("classes.html")
↓見てみて! QtのHTMLマニュアルがこんな感じで表示できるのです。
カッコE!(死語)
セクションのサブメニューに戻る
(first uploaded 2001/02/21 last updated 2002/03/21)