[PR]今日のニュースは
「Infoseek モバイル」


PyQtで日本語を表示するには

 PyQtでは、Qtとほとんど同じ方法で、日本語の文字列が表示できます。 サンプルもC++で書いたQt本来のものとほとんど同じ形をしています。

#! /usr/local/bin/python
import sys
from qt import *

class HelloWidget(QWidget):

  def __init__(self, *args):
    apply(QWidget.__init__, (self,) + args)
    la = QLabel(self.tr("貼ろうワールド"), self)
    la.setFont(QFont("Helvetica", 16, QFont.Normal))
    cmda = QPushButton("Bye", self)
    self.setMinimumSize(200,100)
    self.setMaximumSize(200,100)
    la.setGeometry(40,20,120,30)
    cmda.setGeometry(80,60,40,30)
    self.connect(cmda, SIGNAL("clicked()"), self.close)

a = QApplication(sys.argv)
a.setDefaultCodec(QTextCodec.codecForName("eucJP"))
w = HelloWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.

 ここでは、アプリケーションにデフォルトのcodecを設定する方法をとっています。
  a.setDefaultCodec(QTextCodec.codecForName("eucJP"))
これでまず日本語EUCをデフォルトの文字コードとしておき、
  la = QLabel(self.tr("貼ろうワールド"), self)
こんな感じでself.tr()メソッドを使って、 日本語をラベルやボタンの文字列に指定できます。 フォントの指定方法もQtとほとんど同じなので、類推でうまくいくと思います。
(注) self.trと書けるようになったのはPyQt 3.0以降です。 PyQt 2.5以前は、「QObject.tr」とクラスメソッドの形で書く必要がありました。



PyQtで日本語を入力するには

 そしてやっぱり期待通り!PyQtでも、Qtでやったのとまったく同じ方法で、 日本語の文字を入力することが可能です。 当然、入力された文字列を日本語EUCなどの文字コードでファイルに書き出すことも可能。 詳しくはQtの日本語のページをご覧くださいね。 やり方ほんとにまったく同じなのです。

#! /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("お食事"))
    la = QLabel(self.tr("ご希望のメインディッシュ"), self)
    la.setFont(QFont("Helvetica", 16, QFont.Normal))
    self.leda = QLineEdit(self)
    self.leda.setFont(QFont("fixed", 14, QFont.Normal))
    cmda = QPushButton(self.tr("OKじゃ"), self)

    self.setMinimumSize(300, 140)
    self.setMaximumSize(300, 140)
    la.setGeometry(10, 20, 220, 24)
    self.leda.setGeometry(10, 50, 250, 24);
    cmda.move(160, 100)
    self.connect(cmda, SIGNAL("clicked()"), self.ok)

  def ok(self):
    print "ご希望は、" + str(self.leda.text().local8Bit())
    self.close()

a = QApplication(sys.argv)
a.setDefaultCodec(QTextCodec.codecForName("eucJP"))
w = HelloWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.

 下がその証拠写真です。…ただし、このようにKinput2 の変換ウィンドウが出るのはQt 2.3までです。Qt 3.0以降は、 日本語入力はオンザスポット(インライン)で行うことができるので、 変換ウィンドウは現れません。 UNIXの他のデスクトップ環境に先駆けてインライン入力が可能になった KDEのパワーの源をこの目で我々は見ているのです! (おおげさやなあ)

スクリーンショット

…なんか、嫌

ちょっとメモ(7) - タイトルバーのテキスト
 タイトルバーのテキストは、先述の通り、 ウィンドウになるウィジェットのsetCaptionメソッドで指定できます。 ウィンドウマネージャが日本語に対応している場合には、 絵のように日本語のタイトルも指定できます。
  self.setCaption(self.tr("お食事"))

セクションのサブメニューに戻る
(first uploaded 2000/08/08 last updated 2002/03/21)