日本語 English French [qt-devnet.developpez.com]

閉じる

この例は5分以上かからないでしょう: このプログラムの目的は、 pushButton のクリックでプログラムの実行を終了できるようにすることです。いつものように Qt Designer から始めましょう。プログラムに少し色をそえて quitter(怠け者) と呼ぶことにします。そして Designer で作成した、ボタンを一つ持ったMainWindowを quitter.ui という名前で保存します。このファイルは私のホームページ内のディレクトリからダウンロードできます。

便利なように quitter.py のソースコードも同じ場所からダウンロードできるようにしてあります:

ダウンロードしたら、次のようにPythonで読める形式に変換します:

  1. pyside-uic quitter.ui -o ui_quitter.py

ちょっとややこしいですが、別のコマンドを使い、Pythonが読める形式のファイル ui_quitter.py を作成しました。ファイルの命名規則は、名前を1つ覚えるだけ( quitter )で済む様にすると便利です。名前の残りの部分で、そのファイルの目的が分かるようにします。

注:setuptoolsがインストールされていないのに pyside-uic を実行すると、次のエラーが発生します。

  1.      Traceback (most recent call last):
  2.      File "c:\Python26\Scripts\pyside-uic-script.py", line 5, in <module>
  3.        from pkg_resources import load_entry_point
  4.    ImportError: No module named pkg_resources

setuptoolsはここにあります: http://pypi.python.org/pypi/setuptools [pypi.python.org]

プログラムの一覧は次のとおりです:

  1. #!/usr/bin/env python
  2. # quitter.py - provide a button to quit this "program"
  3.  
  4. import sys
  5.  
  6.  
  7. from ui_quitter import Ui_MainWindow
  8.  
  9. class MainWindow(QMainWindow, Ui_MainWindow):
  10.     def __init__(self, parent=None):
  11.         super(MainWindow, self).__init__(parent)
  12.         self.setupUi(self)
  13.        
  14. if __name__ == '__main__':
  15.     app = QApplication(sys.argv)
  16.     frame = MainWindow()
  17.     frame.show()    
  18.     app.exec_()

プログラムを実行すると、いつもの[x]のクリックと、ボタンのクリックのどちらからでもプログラムを終了できることが分かります。次のリンク先で、このGUIの画像を見ることができます:

では、コードをじっくりと観察してみましょう。ボタンにプログラムの終了を可能しているのは、どこでしょうか?なさそうですね…

見あたらない理由は、この機能が Qt Designer 上で作成されたからです。 Designerシグナルスロットエディタ を持っています。これを使って、こっそりとPushButton.click()シグナルとMainWindow.close()スロットを接続しました。これはquitter.uiファイルに埋めこまれ、その後の変換処理によって、ui_quitter.pyファイルに埋めこまれます。そしてこのファイルからUi_MainWindowクラスをインポートしました。このクラスはまたMainWindowクラスの祖先の一つでもあります。 Pythonの多重継承 を使って、ui_quitter.pyモジュール内のメソッドを簡単に使えるようにします 。

他にも様々なやり方があるので多重継承を避けることもできましたが、便利なら使ってもかまいませんよね? super は祖先へ掘り下げていって、 MainWindow の直近の祖先、つまり祖先のツリー全体を初期化します。

MainWindowinit メソッドで、その親に None を指定していることに気がついたでしょうか。これは MainWindow が、このプログラムの本当の メインウィンドウ であることをPySideに伝える指示のようなものです。

Return to PySideSimplicissimus

Categories:

  • PySide Japanese
  •