日本語 English

PySideの簡単なダイアログアプリケーションの作成

このチュートリアルでは、基本的なウィジェットを持ったシンプルなダイアログの作り方を紹介します。ユーザーが自分の名前をQLineEditに入力し、QPushButtonのクリックで挨拶をするダイアログを作ります。

それではダイアログを作成して表示する簡単なプログラムから始めましょう。次のプログラムはチュートリアルを通して更新されていきますが、このままあなたのPySideプロジェクトに使ってもかまいません。

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. from PySide.QtCore import *
  6. from PySide.QtGui import *
  7.  
  8. class Form(QDialog):
  9.    
  10.     def __init__(self, parent=None):
  11.         super(Form, self).__init__(parent)
  12.         self.setWindowTitle("My Form")
  13.  
  14.  
  15. if __name__ == '__main__':
  16.     # Qt Applicationを作成します
  17.     app = QApplication(sys.argv)
  18.     # formを作成して表示します
  19.     form = Form()
  20.     form.show()
  21.     # Qtのメインループを開始します
  22.     sys.exit(app.exec_())

前回のチュートリアルに目を通しているなら、コードのほとんどはもう見慣れているでしょう。インポートやQApplicationの作成、そしてQtのメインループの実行は、これまでと変わりありません。ここで唯一目新しいのはクラス定義です。

PySideのウィジェットはサブクラス化することができます。この例ではQDialogをサブクラス化し、Formというカスタムダイアログを作ります。クラスには init() メソッドを実装し、このメソッドの中でQDialogの init() メソッドを呼び出して(superを使います)、親ウィジェットであるparentを渡します。もうひとつ新しいのはsetWindowTitle()です。このメソッドはダイアログウィンドウのタイトルを設定します。また main() ではFormオブジェクトの作成と表示を行います。

ウィジェットの作成

これから2つ​​のウィジェットを作成します。ユーザーが名前を入力するQLineEditと、その内容を出力するためのQPushButtonです。 では、Formクラスの init() メソッドに次のコードを追加しましょう。

  1. # ウィジェットを作ります
  2. self.edit = QLineEdit("Write my name here..")
  3. self.button = QPushButton("Show Greetings")

もうお分かりだとおもいますが、ウィジェットはコンストラクタで受け取ったテキストを表示します.

レイアウトの作成とウィジェットの整理

Qtにはアプリケーション上のウィジェットを整理するレイアウトがあります。ここではシンプルに、ウィジェットを垂直に配置するQVBoxLayoutを使います。 init() メソッドのウィジェット作成​後に次のコードを追加します。

  1. # レイアウトを作成し、ウィジェットを追加します
  2. layout = QVBoxLayout()
  3. layout.addWidget(self.edit)
  4. layout.addWidget(self.button)
  5. # ダイアログのレイアウトを設定します
  6. self.setLayout(layout)

レイアウトを作成したらaddWidget()を使ってウィジェットを追加します。最後にFormのレイアウトとしてQVBoxLayoutを設定します。

挨拶メソッドの作成とボタンとの接続

仕上げにFormに機能を追加しましょう。一つはユーザに挨拶をするメソッド、もうひとつはボタンとメソッドとの接続です。このメソッドはFormの一部になるので init() メソッドの後に追加します。

  1. # ユーザーに挨拶します
  2. def greetings(self):
  3.     print ("Hello %s" % self.edit.text())

このメソッドはpythonコンソールにQLineEditの内容を書き込みます。テキストはQLineEdit.text()メソッドで取り出します。

これで全て材料がそろいました。あとはQPushButtonとForm.greetings()メソッドとを接続するだけです。 init() メソッドに、次のように追加します。

  1. # ボタンのシグナルとgreetingsスロットを接続します
  2. self.button.clicked.connect(self.greetings)

プログラムを実行すると、QLineEditで名前が入力できるようになり、コンソール上に挨拶が表示されます。

やってみよう:

  • 自分の名前をpythonコンソールに表示する代わりに、ポップアップメッセージボックスに表示できますか?QMessageBoxの詳しい解説は PySide オンラインリファレンス [pyside.org] をご覧ください。
  • ウィンドウにアイコンを追加できますか? PySide オンラインリファレンス [pyside.org] でWidgetの説明を確認しましょう。
  • 閉じるボタンを追加してはどうでしょうか?新しいボタンを作成してレイアウトに追加し、 exitスロットに接続します。
  • QHBoxLayoutを使えばレイアウトを水平方向にできます! PySide オンラインリファレンス [pyside.org] で他のレイアウトチェックしましょう。とくにQHBoxLayout、 QGridLayoutなどです。

コード全体

このチュートリアルの完全なコードは次のとおりです。

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. from PySide.QtCore import *
  6. from PySide.QtGui import *
  7.  
  8. class Form(QDialog):
  9.    
  10.     def __init__(self, parent=None):
  11.         super(Form, self).__init__(parent)
  12.         # ウィジェットを作成します。
  13.         self.edit = QLineEdit("Write my name here")
  14.         self.button = QPushButton("Show Greetings")        
  15.         # レイアウトを作成しウィジェットを追加します
  16.         layout = QVBoxLayout()
  17.         layout.addWidget(self.edit)
  18.         layout.addWidget(self.button)
  19.         # ダイアログのレイアウトを設定します
  20.         self.setLayout(layout)
  21.         # ボタンのシグナルをgreetingsと接続します
  22.         self.button.clicked.connect(self.greetings)
  23.        
  24.     # ユーザへ挨拶します
  25.     def greetings(self):
  26.         print ("Hello %s" % self.edit.text())        
  27.  
  28.  
  29. if __name__ == '__main__':
  30.     # Qt Applicationを作ります
  31.     app = QApplication(sys.argv)
  32.     # formを作成して表示します
  33.     form = Form()
  34.     form.show()
  35.     # Qtのメインループを開始します
  36.     sys.exit(app.exec_())

Categories: