PySideSimplicissimus Module 5 Combine Japanese: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:LanguageBindings]]<br />[[Category:LanguageBindings::PySide::Newbie Tutorials]]<br />[[Category:LanguageBindings::PySide Japanese]]
[[Category:LanguageBindings]]
[[Category:LanguageBindings::PySide::Newbie Tutorials]]
[[Category:LanguageBindings::PySide Japanese]]


* '''Note:''' この記事は [[PySide_Newbie_Tutorials]] の一部です。
* '''Note:''' この記事は [[PySide_Newbie_Tutorials]] の一部です。


'''日本語''' [[PySideSimplicissimus_Module_5_Combine|English]] [&quot;French&amp;quot;:http://qt-devnet.developpez.com/tutoriels/pyside/simplissimus/4-combiner/]
'''日本語''' [[PySideSimplicissimus_Module_5_Combine|English]] ["French":http://qt-devnet.developpez.com/tutoriels/pyside/simplissimus/4-combiner/]


= 組み合わせる - License, About, Close =
= 組み合わせる - License, About, Close =


この例では、これまでの3つの小さなスクリプトを組み合わせてプログラムを一つ作成します。プログラム名はcombineです。ソースを含む必要な資料は、以下のリンクからダウンロードできます。<br /> http://akabaila.pcug.org.au/pyside-data/ と http://akabaila.pcug.org.au/pyside-data/combine/
この例では、これまでの3つの小さなスクリプトを組み合わせてプログラムを一つ作成します。プログラム名はcombineです。ソースを含む必要な資料は、以下のリンクからダウンロードできます。
http://akabaila.pcug.org.au/pyside-data/ と http://akabaila.pcug.org.au/pyside-data/combine/


まず最初に '''Qt Designer''' を使ってフォームを設計し、 '''combine.ui''' ファイルを作成します。メニューバーに '''File''' アイテムを追加し、そのサブメニューに '''Show GPL''' 、 '''About''' 、 '''Close''' を追加します。Qt Designer付属の接続ツール '''シグナル/スロットエディタ''' を使い、ドロップダウンメニューから、Sender:action_CloseとSignlal:triggered、 Receiver:MainWindowとSlot:close()を選択します。
まず最初に '''Qt Designer''' を使ってフォームを設計し、 '''combine.ui''' ファイルを作成します。メニューバーに '''File''' アイテムを追加し、そのサブメニューに '''Show GPL''' 、 '''About''' 、 '''Close''' を追加します。Qt Designer付属の接続ツール '''シグナル/スロットエディタ''' を使い、ドロップダウンメニューから、Sender:action_CloseとSignlal:triggered、 Receiver:MainWindowとSlot:close()を選択します。
Line 15: Line 18:
シグナルはスロットと接続されます。この例題ではシグナルと、プログラムを終了するMainWindowのcloseスロットを接続していますが、PySideではシグナルとPythonメソッドとの接続もできます。
シグナルはスロットと接続されます。この例題ではシグナルと、プログラムを終了するMainWindowのcloseスロットを接続していますが、PySideではシグナルとPythonメソッドとの接続もできます。


フォームをcombine.uiとして保存した後、以下のようにPythonで読める形式に変換します。<br /><code><br />pyside-uic combine.ui &gt; ui_combine.py<br /></code><br />このui_combine.pyはPythonだけでなく、人間も読解できます。以下のコードでこのプログラムの使い方を学びましょう。
フォームをcombine.uiとして保存した後、以下のようにPythonで読める形式に変換します。
<code>
pyside-uic combine.ui > ui_combine.py
</code>
このui_combine.pyはPythonだけでなく、人間も読解できます。以下のコードでこのプログラムの使い方を学びましょう。


<code><br />#!/usr/bin/env python<br /># combine.py - combination of ShowGPL, About, Close scripts
<code>
#!/usr/bin/env python
# combine.py - combination of ShowGPL, About, Close scripts


import sys<br />import platform
import sys
import platform


import PySide<br />from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox
import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox


''version'' = '0.0.1'
''version'' = '0.0.1'
Line 27: Line 38:
from ui_combine import Ui_MainWindow
from ui_combine import Ui_MainWindow


class MainWindow(QMainWindow, Ui_MainWindow):<br /> def ''init''(self, parent=None):<br /> super(MainWindow, self).''init''(parent)<br /> self.setupUi(self)
class MainWindow(QMainWindow, Ui_MainWindow):
def ''init''(self, parent=None):
super(MainWindow, self).''init''(parent)
self.setupUi(self)


if ''name'' == '''main''':<br /> app = QApplication(sys.argv)<br /> frame = MainWindow()<br /> frame.show()<br /> app.exec_()<br /></code><br />約15行ほどの、これから何度も使うことになるお決まりの内容です。勉強のためにプログラムを実行して動作確認をしましょう。プログラムではすべてのメニューアイテムのトリガーをテストできますが、今のところ機能しているのはCloseだけです。次のステップでは、残りのメニューアイテムのコードを追加していきます。
if ''name'' == '''main''':
app = QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()
</code>
約15行ほどの、これから何度も使うことになるお決まりの内容です。勉強のためにプログラムを実行して動作確認をしましょう。プログラムではすべてのメニューアイテムのトリガーをテストできますが、今のところ機能しているのはCloseだけです。次のステップでは、残りのメニューアイテムのコードを追加していきます。


<code><br />#!/usr/bin/env python<br /># combine.py - combination of ShowGPL, About, Close scripts<br /># Copyright note omitted.
<code>
#!/usr/bin/env python
# combine.py - combination of ShowGPL, About, Close scripts
# Copyright note omitted.


import sys<br />import platform
import sys
import platform


import PySide<br />from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox
import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox


''version'' = '0.0.2'<br />from ui_combine import Ui_MainWindow
''version'' = '0.0.2'
from ui_combine import Ui_MainWindow


class MainWindow(QMainWindow, Ui_MainWindow):<br /> def ''init''(self, parent=None):<br /> super(MainWindow, self).''init''(parent)<br /> self.setupUi(self)<br /> self.actionShow_GPL.triggered.connect(self.showGPL)<br /> self.action_About.triggered.connect(self.about)
class MainWindow(QMainWindow, Ui_MainWindow):
def ''init''(self, parent=None):
super(MainWindow, self).''init''(parent)
self.setupUi(self)
self.actionShow_GPL.triggered.connect(self.showGPL)
self.action_About.triggered.connect(self.about)


def showGPL(self):<br /> '''Read and display GPL licence.'''<br /> self.textEdit.setText(open('COPYING.txt').read())
def showGPL(self):
'''Read and display GPL licence.'''
self.textEdit.setText(open('COPYING.txt').read())


def about(self):<br /> '''Popup a box with about message.'''<br /> QMessageBox.about(self, &quot;About PyQt, Platform and the like&amp;quot;,<br /> &quot;&quot;&quot;&lt;b&amp;gt; About this program &lt;/b&amp;gt; v %s<br /> &lt;p&amp;gt;Copyright &amp;copy; 2010 Joe Bloggs.<br /> All rights reserved in accordance with<br /> GPL v2 or later - NO WARRANTIES!<br /> &lt;p&amp;gt;This application can be used for<br /> displaying OS and platform details.<br /> &lt;p&amp;gt;Python %s - PySide version %s - Qt version %s on s&amp;quot;&quot;&quot; (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system&amp;amp;#40;&amp;#41;))
def about(self):
'''Popup a box with about message.'''
QMessageBox.about(self, "About PyQt, Platform and the like",
"""<b> About this program </b> v %s
<p>Copyright &amp;copy; 2010 Joe Bloggs.
All rights reserved in accordance with
GPL v2 or later - NO WARRANTIES!
<p>This application can be used for
displaying OS and platform details.
<p>Python %s - PySide version %s - Qt version %s on s""" (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system()))


if ''name'' == '''main''':<br /> app = QApplication(sys.argv)<br /> frame = MainWindow()<br /> frame.show()<br /> app.exec_()<br /></code><br />about と showGPL メソッドを追加して、次の構文でシグナルと接続します。<br /><code><br /> self.actionShow_GPL.triggered.connect(self.showGPL)<br /> self.action_About.triggered.connect(self.about)<br /></code>
if ''name'' == '''main''':
app = QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()
</code>
about と showGPL メソッドを追加して、次の構文でシグナルと接続します。
<code>
self.actionShow_GPL.triggered.connect(self.showGPL)
self.action_About.triggered.connect(self.about)
</code>


これでプログラムの機能は完全になりました。やりましたね。では次の仕事にとりかかりましょう。我々のGUIはまだ見た目がぱっとしません。優れたGUIはメニューの代替手段となる、ボタンやアイコンツールバーを持っているものです。またマウスポインタがアイコン上に移動したときに、機能のヒントやMainWindowフォームのタスクバー上にメッセージを表示すれば一段と素敵になるでしょう。
これでプログラムの機能は完全になりました。やりましたね。では次の仕事にとりかかりましょう。我々のGUIはまだ見た目がぱっとしません。優れたGUIはメニューの代替手段となる、ボタンやアイコンツールバーを持っているものです。またマウスポインタがアイコン上に移動したときに、機能のヒントやMainWindowフォームのタスクバー上にメッセージを表示すれば一段と素敵になるでしょう。
Line 51: Line 103:
'''以上の機能の作成が次の仕事です。'''
'''以上の機能の作成が次の仕事です。'''


チュートリアルではこれから、アイコン、ポップアップヒント、ステータスバーヒントを備えたツールバーの作成メソッドに取り掛かります。まず必要なのはアイコンです。車輪の再発明をしないように利用可能なアイコンセットを使いましょう。無料の「タンゴのアイコンセット」を以下からダウンロードします。<br /> http://tango.freedesktop.org/Tango_Icon_Library
チュートリアルではこれから、アイコン、ポップアップヒント、ステータスバーヒントを備えたツールバーの作成メソッドに取り掛かります。まず必要なのはアイコンです。車輪の再発明をしないように利用可能なアイコンセットを使いましょう。無料の「タンゴのアイコンセット」を以下からダウンロードします。
http://tango.freedesktop.org/Tango_Icon_Library


これはライセンス制約のない、大規模なアイコンのコレクションです。必要とする以上のアイコンがあるので '''tango_select''' という名前の小さなライブラリを作り、必要なアイコンをまとめておくとよいでしょう。QtDesignerでcombine.uiを作ったように、テキストエディタ(windowsならNotepad, KDEならkate、Gnomeではgedit)で '''リソースソースファイル''' combine.qrcを作ります。一見、黒魔術のようなXMLですが、コピーして簡単に変更できるシンプルな形式です。では中身を見てみましょう。
これはライセンス制約のない、大規模なアイコンのコレクションです。必要とする以上のアイコンがあるので '''tango_select''' という名前の小さなライブラリを作り、必要なアイコンをまとめておくとよいでしょう。QtDesignerでcombine.uiを作ったように、テキストエディタ(windowsならNotepad, KDEならkate、Gnomeではgedit)で '''リソースソースファイル''' combine.qrcを作ります。一見、黒魔術のようなXMLですが、コピーして簡単に変更できるシンプルな形式です。では中身を見てみましょう。


<code><br />&lt;!DOCTYPE RCC&amp;gt;&lt;RCC version=&quot;1.0&amp;quot;&gt;<br />&lt;qresource&amp;gt;<br />&lt;file alias=&quot;quit.png&amp;quot;&gt;select_tango/32x32/actions/system-log-out.png&amp;lt;/file&amp;gt;<br />&lt;file alias=&quot;about.png&amp;quot;&gt;select_tango/32x32/apps/preferences-system-session.png&amp;lt;/file&amp;gt;<br />&lt;file alias=&quot;showgpl.png&amp;quot;&gt;select_tango/32x32/apps/help-browser.png&amp;lt;/file&amp;gt;<br />&lt;/qresource&amp;gt;<br />&lt;/RCC&amp;gt;<br /></code>
<code>
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="quit.png">select_tango/32x32/actions/system-log-out.png</file>
<file alias="about.png">select_tango/32x32/apps/preferences-system-session.png</file>
<file alias="showgpl.png">select_tango/32x32/apps/help-browser.png</file>
</qresource>
</RCC>
</code>


たとえば '''quit''' アクションのアイコンは、その別名である '''quit.png''' としてプログラム中で参照されます。そして実際にはタンゴコレクションの '''system-log-out.png''' アイコンが使用されます。では次にcombine.uiと同様に、combine.qrcをコンパイルします。
たとえば '''quit''' アクションのアイコンは、その別名である '''quit.png''' としてプログラム中で参照されます。そして実際にはタンゴコレクションの '''system-log-out.png''' アイコンが使用されます。では次にcombine.uiと同様に、combine.qrcをコンパイルします。


<code><br /> pyside-rcc combine.qrc <s>o qrc_combine.py<br /></code><br />qrc_combine.pyファイルは以下のようにプログラムにインポートされます。
<code>
<br /><code><br />#!/usr/bin/env python<br /># combine.py</s> combination of ShowGPL, About, Close scripts
pyside-rcc combine.qrc -o qrc_combine.py
</code>
qrc_combine.pyファイルは以下のようにプログラムにインポートされます。
 
<code>
#!/usr/bin/env python
# combine.py- combination of ShowGPL, About, Close scripts


# Copyright notice removed to save space.  
# Copyright notice removed to save space.  


import sys<br />import platform
import sys
import platform


import PySide<br />from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox, QIcon
import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox, QIcon


''version'' = '0.0.3'<br />from ui_combine import Ui_MainWindow<br />import qrc_combine
''version'' = '0.0.3'
from ui_combine import Ui_MainWindow
import qrc_combine


class MainWindow(QMainWindow, Ui_MainWindow):<br /> def ''init''(self, parent=None):<br /> super(MainWindow, self).''init''(parent)<br /> self.setupUi(self)<br /> self.actionShow_GPL.triggered.connect(self.showGPL)<br /> self.action_About.triggered.connect(self.about)<br /> iconToolBar = self.addToolBar(&quot;iconBar.png&amp;quot;)<br />#——————————————————<br /># Add icons to appear in tool bar - step 1<br /> self.actionShow_GPL.setIcon(QIcon(&quot;:/showgpl.png&amp;quot;))<br /> self.action_About.setIcon(QIcon(&quot;:/about.png&amp;quot;))<br /> self.action_Close.setIcon(QIcon(&quot;:/quit.png&amp;quot;))<br />#——————————————————<br /># Show a tip on the Status Bar - step 2<br /> self.actionShow_GPL.setStatusTip(&quot;Show GPL Licence&amp;quot;)<br /> self.action_About.setStatusTip(&quot;Pop up the About dialog.&quot;)<br /> self.action_Close.setStatusTip(&quot;Close the program.&quot;)<br />#——————————————————<br /> iconToolBar.addAction(self.actionShow_GPL)<br /> iconToolBar.addAction(self.action_About)<br /> iconToolBar.addAction(self.action_Close)
class MainWindow(QMainWindow, Ui_MainWindow):
def ''init''(self, parent=None):
super(MainWindow, self).''init''(parent)
self.setupUi(self)
self.actionShow_GPL.triggered.connect(self.showGPL)
self.action_About.triggered.connect(self.about)
iconToolBar = self.addToolBar("iconBar.png")
#——————————————————
# Add icons to appear in tool bar - step 1
self.actionShow_GPL.setIcon(QIcon(":/showgpl.png"))
self.action_About.setIcon(QIcon(":/about.png"))
self.action_Close.setIcon(QIcon(":/quit.png"))
#——————————————————
# Show a tip on the Status Bar - step 2
self.actionShow_GPL.setStatusTip("Show GPL Licence")
self.action_About.setStatusTip("Pop up the About dialog.")
self.action_Close.setStatusTip("Close the program.")
#——————————————————
iconToolBar.addAction(self.actionShow_GPL)
iconToolBar.addAction(self.action_About)
iconToolBar.addAction(self.action_Close)


def showGPL(self):<br /> '''Read and display GPL licence.'''<br /> self.textEdit.setText(open('COPYING.txt').read())
def showGPL(self):
'''Read and display GPL licence.'''
self.textEdit.setText(open('COPYING.txt').read())


def about(self):<br /> '''Popup a box with about message.'''<br /> QMessageBox.about(self, &quot;About PyQt, Platform and the like&amp;quot;,<br /> &quot;&quot;&quot;&lt;b&amp;gt; About this program &lt;/b&amp;gt; v %s<br /> &lt;p&amp;gt;Copyright &amp;copy; 2010 Joe Bloggs.<br /> All rights reserved in accordance with<br /> GPL v2 or later - NO WARRANTIES!<br /> &lt;p&amp;gt;This application can be used for<br /> displaying OS and platform details.<br /> &lt;p&amp;gt;Python %s - PySide version %s - Qt version %s on s&amp;quot;&quot;&quot; (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system&amp;amp;#40;&amp;#41;))
def about(self):
'''Popup a box with about message.'''
QMessageBox.about(self, "About PyQt, Platform and the like",
"""<b> About this program </b> v %s
<p>Copyright &amp;copy; 2010 Joe Bloggs.
All rights reserved in accordance with
GPL v2 or later - NO WARRANTIES!
<p>This application can be used for
displaying OS and platform details.
<p>Python %s - PySide version %s - Qt version %s on s""" (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system()))


if ''name'' == '''main''':<br /> app = QApplication(sys.argv)<br /> frame = MainWindow()<br /> frame.show()<br /> app.exec_()<br /></code>
if ''name'' == '''main''':
app = QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()
</code>


ステップ1ではアイコン画像をアクションに追加しています。
ステップ1ではアイコン画像をアクションに追加しています。


<code><br />#——————————————————<br /># Add icons to appear in tool bar - step 1<br /> self.actionShow_GPL.setIcon(QIcon(&quot;:/showgpl.png&amp;quot;))<br /> self.action_About.setIcon(QIcon(&quot;:/about.png&amp;quot;))<br /> self.action_Close.setIcon(QIcon(&quot;:/quit.png&amp;quot;))<br />#——————————————————<br /></code><br />同じように、ステップ2ではヒントのテキストをプログラムに追加しています。<br /><code><br />#——————————————————<br /># Show a tip on the Status Bar - step 2<br /> self.actionShow_GPL.setStatusTip(&quot;Show GPL Licence&amp;quot;)<br /> self.action_About.setStatusTip(&quot;Pop up the About dialog.&quot;)<br /> self.action_Close.setStatusTip(&quot;Close the program.&quot;)<br />#——————————————————<br /></code><br />古くから言うように「百聞は一見に如かず」です。完成したcombine.pyのGUIの画像は、以下の外部リポジトリから表示可能です。<br />* http://akabaila.pcug.org.au/pyside-images/combine-v0.0.3.png<br />勉強のために、ステップ1とステップ2のコードの両方を削除してプログラムを実行し、動作を観察してみましょう。今度はステップ1を元に戻して再度プログラムを実行してみましょう。次にステップ2を元に戻します。ステップ1と2を削除するとGUIはアイコンのない地味な見た目になります。<br />* http://akabaila.pcug.org.au/pyside-images/combine-v0.0.3-noIcons.png
<code>
#——————————————————
# Add icons to appear in tool bar - step 1
self.actionShow_GPL.setIcon(QIcon(":/showgpl.png"))
self.action_About.setIcon(QIcon(":/about.png"))
self.action_Close.setIcon(QIcon(":/quit.png"))
#——————————————————
</code>
同じように、ステップ2ではヒントのテキストをプログラムに追加しています。
<code>
#——————————————————
# Show a tip on the Status Bar - step 2
self.actionShow_GPL.setStatusTip("Show GPL Licence")
self.action_About.setStatusTip("Pop up the About dialog.")
self.action_Close.setStatusTip("Close the program.")
#——————————————————
</code>
古くから言うように「百聞は一見に如かず」です。完成したcombine.pyのGUIの画像は、以下の外部リポジトリから表示可能です。
* http://akabaila.pcug.org.au/pyside-images/combine-v0.0.3.png
勉強のために、ステップ1とステップ2のコードの両方を削除してプログラムを実行し、動作を観察してみましょう。今度はステップ1を元に戻して再度プログラムを実行してみましょう。次にステップ2を元に戻します。ステップ1と2を削除するとGUIはアイコンのない地味な見た目になります。
* http://akabaila.pcug.org.au/pyside-images/combine-v0.0.3-noIcons.png


ヒント:行を削除するには先頭にハッシュ文字を追加してコメントアウトします。必要に応じて後からハッシュ文字を削除してください
ヒント:行を削除するには先頭にハッシュ文字を追加してコメントアウトします。必要に応じて後からハッシュ文字を削除してください

Revision as of 10:13, 25 February 2015


日本語 English ["French":http://qt-devnet.developpez.com/tutoriels/pyside/simplissimus/4-combiner/]

組み合わせる - License, About, Close

この例では、これまでの3つの小さなスクリプトを組み合わせてプログラムを一つ作成します。プログラム名はcombineです。ソースを含む必要な資料は、以下のリンクからダウンロードできます。

http://akabaila.pcug.org.au/pyside-data/http://akabaila.pcug.org.au/pyside-data/combine/

まず最初に Qt Designer を使ってフォームを設計し、 combine.ui ファイルを作成します。メニューバーに File アイテムを追加し、そのサブメニューに Show GPLAboutClose を追加します。Qt Designer付属の接続ツール シグナル/スロットエディタ を使い、ドロップダウンメニューから、Sender:action_CloseとSignlal:triggered、 Receiver:MainWindowとSlot:close()を選択します。

Qtでは、クリックやアクションによって発生する シグナル に、関連付けたいアクションを接続します。シグナルの受信側は スロット と呼びます。通常、GUIの設計は付属の標準シグナルを使って行います。 triggered はこうした標準シグナルの一つです。

シグナルはスロットと接続されます。この例題ではシグナルと、プログラムを終了するMainWindowのcloseスロットを接続していますが、PySideではシグナルとPythonメソッドとの接続もできます。

フォームをcombine.uiとして保存した後、以下のようにPythonで読める形式に変換します。

pyside-uic combine.ui > ui_combine.py

このui_combine.pyはPythonだけでなく、人間も読解できます。以下のコードでこのプログラムの使い方を学びましょう。

#!/usr/bin/env python
# combine.py - combination of ShowGPL, About, Close scripts

import sys
import platform

import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox

''version'' = '0.0.1'

from ui_combine import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
 def ''init''(self, parent=None):
 super(MainWindow, self).''init''(parent)
 self.setupUi(self)

if ''name'' == '''main''':
 app = QApplication(sys.argv)
 frame = MainWindow()
 frame.show()
 app.exec_()

約15行ほどの、これから何度も使うことになるお決まりの内容です。勉強のためにプログラムを実行して動作確認をしましょう。プログラムではすべてのメニューアイテムのトリガーをテストできますが、今のところ機能しているのはCloseだけです。次のステップでは、残りのメニューアイテムのコードを追加していきます。

#!/usr/bin/env python
# combine.py - combination of ShowGPL, About, Close scripts
# Copyright note omitted.

import sys
import platform

import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox

''version'' = '0.0.2'
from ui_combine import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
 def ''init''(self, parent=None):
 super(MainWindow, self).''init''(parent)
 self.setupUi(self)
 self.actionShow_GPL.triggered.connect(self.showGPL)
 self.action_About.triggered.connect(self.about)

def showGPL(self):
 '''Read and display GPL licence.'''
 self.textEdit.setText(open('COPYING.txt').read())

def about(self):
 '''Popup a box with about message.'''
 QMessageBox.about(self, "About PyQt, Platform and the like",
 """<b> About this program </b> v %s
 <p>Copyright &amp;copy; 2010 Joe Bloggs.
 All rights reserved in accordance with
 GPL v2 or later - NO WARRANTIES!
 <p>This application can be used for
 displaying OS and platform details.
 <p>Python %s - PySide version %s - Qt version %s on s"""  (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system()))

if ''name'' == '''main''':
 app = QApplication(sys.argv)
 frame = MainWindow()
 frame.show()
 app.exec_()

about と showGPL メソッドを追加して、次の構文でシグナルと接続します。

 self.actionShow_GPL.triggered.connect(self.showGPL)
 self.action_About.triggered.connect(self.about)

これでプログラムの機能は完全になりました。やりましたね。では次の仕事にとりかかりましょう。我々のGUIはまだ見た目がぱっとしません。優れたGUIはメニューの代替手段となる、ボタンやアイコンツールバーを持っているものです。またマウスポインタがアイコン上に移動したときに、機能のヒントやMainWindowフォームのタスクバー上にメッセージを表示すれば一段と素敵になるでしょう。

以上の機能の作成が次の仕事です。

チュートリアルではこれから、アイコン、ポップアップヒント、ステータスバーヒントを備えたツールバーの作成メソッドに取り掛かります。まず必要なのはアイコンです。車輪の再発明をしないように利用可能なアイコンセットを使いましょう。無料の「タンゴのアイコンセット」を以下からダウンロードします。

http://tango.freedesktop.org/Tango_Icon_Library

これはライセンス制約のない、大規模なアイコンのコレクションです。必要とする以上のアイコンがあるので tango_select という名前の小さなライブラリを作り、必要なアイコンをまとめておくとよいでしょう。QtDesignerでcombine.uiを作ったように、テキストエディタ(windowsならNotepad, KDEならkate、Gnomeではgedit)で リソースソースファイル combine.qrcを作ります。一見、黒魔術のようなXMLですが、コピーして簡単に変更できるシンプルな形式です。では中身を見てみましょう。

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="quit.png">select_tango/32x32/actions/system-log-out.png</file>
<file alias="about.png">select_tango/32x32/apps/preferences-system-session.png</file>
<file alias="showgpl.png">select_tango/32x32/apps/help-browser.png</file>
</qresource>
</RCC>

たとえば quit アクションのアイコンは、その別名である quit.png としてプログラム中で参照されます。そして実際にはタンゴコレクションの system-log-out.png アイコンが使用されます。では次にcombine.uiと同様に、combine.qrcをコンパイルします。

 pyside-rcc combine.qrc -o qrc_combine.py

qrc_combine.pyファイルは以下のようにプログラムにインポートされます。

#!/usr/bin/env python
# combine.py- combination of ShowGPL, About, Close scripts

# Copyright notice removed to save space. 

import sys
import platform

import PySide
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton, QMessageBox, QIcon

''version'' = '0.0.3'
from ui_combine import Ui_MainWindow
import qrc_combine

class MainWindow(QMainWindow, Ui_MainWindow):
 def ''init''(self, parent=None):
 super(MainWindow, self).''init''(parent)
 self.setupUi(self)
 self.actionShow_GPL.triggered.connect(self.showGPL)
 self.action_About.triggered.connect(self.about)
 iconToolBar = self.addToolBar("iconBar.png")
#——————————————————
# Add icons to appear in tool bar - step 1
 self.actionShow_GPL.setIcon(QIcon(":/showgpl.png"))
 self.action_About.setIcon(QIcon(":/about.png"))
 self.action_Close.setIcon(QIcon(":/quit.png"))
#——————————————————
# Show a tip on the Status Bar - step 2
 self.actionShow_GPL.setStatusTip("Show GPL Licence")
 self.action_About.setStatusTip("Pop up the About dialog.")
 self.action_Close.setStatusTip("Close the program.")
#——————————————————
 iconToolBar.addAction(self.actionShow_GPL)
 iconToolBar.addAction(self.action_About)
 iconToolBar.addAction(self.action_Close)

def showGPL(self):
 '''Read and display GPL licence.'''
 self.textEdit.setText(open('COPYING.txt').read())

def about(self):
 '''Popup a box with about message.'''
 QMessageBox.about(self, "About PyQt, Platform and the like",
 """<b> About this program </b> v %s
 <p>Copyright &amp;copy; 2010 Joe Bloggs.
 All rights reserved in accordance with
 GPL v2 or later - NO WARRANTIES!
 <p>This application can be used for
 displaying OS and platform details.
 <p>Python %s - PySide version %s - Qt version %s on s"""  (''version'', platform.python_version(), PySide.''version'', PySide.QtCore.''version'', platform.system()))

if ''name'' == '''main''':
 app = QApplication(sys.argv)
 frame = MainWindow()
 frame.show()
 app.exec_()

ステップ1ではアイコン画像をアクションに追加しています。

#——————————————————
# Add icons to appear in tool bar - step 1
 self.actionShow_GPL.setIcon(QIcon(":/showgpl.png"))
 self.action_About.setIcon(QIcon(":/about.png"))
 self.action_Close.setIcon(QIcon(":/quit.png"))
#——————————————————

同じように、ステップ2ではヒントのテキストをプログラムに追加しています。

#——————————————————
# Show a tip on the Status Bar - step 2
 self.actionShow_GPL.setStatusTip("Show GPL Licence")
 self.action_About.setStatusTip("Pop up the About dialog.")
 self.action_Close.setStatusTip("Close the program.")
#——————————————————

古くから言うように「百聞は一見に如かず」です。完成したcombine.pyのGUIの画像は、以下の外部リポジトリから表示可能です。

  • combine-v0.0.3.png

勉強のために、ステップ1とステップ2のコードの両方を削除してプログラムを実行し、動作を観察してみましょう。今度はステップ1を元に戻して再度プログラムを実行してみましょう。次にステップ2を元に戻します。ステップ1と2を削除するとGUIはアイコンのない地味な見た目になります。

  • combine-v0.0.3-noIcons.png

ヒント:行を削除するには先頭にハッシュ文字を追加してコメントアウトします。必要に応じて後からハッシュ文字を削除してください

一番必要なのは 楽しむこと です!

チュートリアルのクラスで聞いた話です。ある講師が苦情を訴えに来た初年度の学生の母親に説明しました。「息子さんは、このコースを修了するのに十分な知識が足りなかっただけなんです。彼には一度Pysideを教えました。そして二度目にもです。三度目にはすべてを徹底的に教えました。それで、この私でさえPysideが分かったというのに 、息子さんはまだ分からないのですよ!」

PysideによるGUIプログラミングをよく理解できているといいんですが ー すくなくとも私は :)

Return to PySideSimplicissimus