良い時間です。
最近、別のプログラミング言語を学ぶことにしました。 選択肢はpythonに落ちました。 いくつかの小さなスクリプトを書きました。 しかし、まず第一に、GUIアプリケーションを作成したかったのです。 インターネット上で、この小さなチュートリアルに出会いました。このチュートリアルを読んだ結果、翻訳が注目されました。 誰かがそれを役に立つと思うことを願っています。
このチュートリアルの目的は、Qtライブラリを使用して小さなPythonアプリケーションを作成する方法を理解することです。
すべてのタスクを正常に完了するには、Pythonの基本的な知識が必要ですが、Qtを知る必要はありません。 これらの例ではLinuxを使用していますが、既に
Pythonと
PyQtが実行されていると仮定しています。 これを確認するには、コンソールで「python」と入力してpythonシェルを開き、次のように入力します。
インポートqt
エラーメッセージが表示されない場合は、開始する準備ができています。 このガイドの例は可能な限り簡略化されており、プログラムの作成と構造化に役立つ方法を示しています。 サンプルのソースコードを読むことが重要です;ほとんどのことはそこで説明されています。 例を使用して、それらを変更してみてください。 これは慣れるのに最適な方法です。
こんにちは世界!
簡単なものから始めましょう。 プログラムはウィンドウを開き、何かを表示します。 以下のコードは、「Hello、world!」というウィンドウを示しています。 明らかに。
#!/ usr / bin / python
インポートシステム
qt importから*
#アプリケーションを作成して引数を渡す
a = QApplication(sys.argv)
#ウィジェットを作成
#最初の引数は、見たいテキストです。
#2番目の引数は親ウィジェットです。
#なぜなら こんにちはは唯一のウィジェットで、親はありません
hello = QLabel(「Hello world!」、なし)
#ウィジェットを主なものにする
a.setMainWidget(hello)
#ウィジェットを表示
hello.show()
#アプリケーションを実行
a.exec_loop()
約7行のコードで、可能な限り単純です。
そして、これはどのように見えるかです:
ボタン
インタラクティブ性を追加してください! 「Hello、World!」という碑文をボタンに置き換え、アクションを割り当てます。 この終了は「信号添付」と呼ばれ、ボタンが押されたときにスロットに送信されるイベントです。これは機能です。 この関数は、イベントが発生するとトリガーされます。
#!/ usr / bin / python
#コーディング= utf-8
インポートシステム
qt importから*
a = QApplication(sys.argv)
#ボタンを押すと呼び出される関数
def sayHello():
「Hello、World!」という印刷
#ボタンを作成
hellobutton = QPushButton(「Hello world!」と言う、なし)
#クリックハンドラーをボタンに割り当てる
a.connect(hellobutton、SIGNAL( "clicked()")、sayHello)
#ボタンをメインウィジェットに割り当てる
a.setMainWidget(hellobutton)
#ショー
hellobutton.show()
#アプリケーションを実行
a.exec_loop()
これは、通常のアプリケーションに似ています。
この方法でのプログラミングは拡張可能ではなく、続行するために立ち寄らないでください。 さて、構造を追加し、オブジェクト指向のアプローチを使用して、Pythonの方法でそれを行いましょう。 QApplicationから継承した独自のクラスを作成し、そのメソッドに必要なものを配置します。ウィジェットを作成する1つのメソッドと、シグナルが到着したときに開始するコードを含むスロットです。
#!/ usr / bin / python
#コーディング= UTF-8
インポートシステム
qt importから*
#クラスはQApplicationを継承します
クラスHelloApplication(QApplication):
def __init __(self、args):
「」「
コンストラクターでは、アプリケーションを実行するために必要なすべてを行います。
__init__メソッドでQApplicationを作成し、ウィジェットを追加して、最後に
exec_loopを実行します
「」「
QApplication .__ init __(self、args)
self.addWidgets()
self.exec_loop()
def addWidgets(自己):
"" "このメソッドでは、ウィジェットを追加し、シグナルハンドラーをアタッチします。
ウィジェットのシグナルハンドラは「スロット」とも呼ばれます
「」「
self.hellobutton = QPushButton(「Say 'Hello、World!'」、なし)
self.connect(self.hellobutton、SIGNAL(「クリック()」)、self.slotSayHello)
self.setMainWidget(self.hellobutton)
self.hellobutton.show()
def slotSayHello(self):
「」「
これはスロットの例です-信号が到着したときに呼び出されるメソッド。
「」「
「Hello、World!」という印刷
#このスクリプトは個別にのみ実行する必要があるため、これを確認する必要があります。
#ただし、コードを実行せずにこのプログラムに接続できる必要があります
__name__ == "__main__"の場合:
app = HelloApplication(sys.argv)
インターフェイスコーディングサック
そこで、Qt3 Designerを使用してGUIを作成します。 写真では、シンプルなインターフェースを見ることができます。 ウィジェットの名前は緑色で書かれています。 必要なことはすべて
- Qtデザイナーから.uiファイルをPythonクラスにコンパイルします
- サブクラスを作成し、mainWidgetとして使用します
したがって、コードを掘り下げることなくQtデザイナーでインターフェイスを変更できます。
チーム
pyuic testapp_ui.ui -o testapp_ui.py
使用できるpythonクラスを作成します。
プログラムの作業は次のように説明できます。
- ラインエディットを埋める
- 追加ボタンをクリックして、lineeditからテキストを読み取り、それをリストビューに追加するメソッドをアタッチします
- 削除ボタンをクリックすると、選択したアイテムがリストビューから削除されます。
コメント付きのコードは次のとおりです。
#!/ usr / bin / python
#コーディング= utf-8
testapp_uiからTestAppUIをインポート
qt importから*
インポートシステム
クラスHelloApplication(QApplication):
def __init __(self、args):
「」「
コンストラクターでは、アプリケーションを起動するために必要なすべてのことを行います。
__init__メソッドでQApplicationを作成し、ウィジェットを追加して、最後に
exec_loopを実行します
「」「
QApplication .__ init __(self、args)
#以来Noneを渡す このトップレベルのウィジェット
self.maindialog = TestApp(なし)
self.setMainWidget(self.maindialog)
self.maindialog.show()
self.exec_loop()
クラスTestApp(TestAppUI):
def __init __(self、parent):
#親コンストラクターを実行し、スロットをメソッドにアタッチします
TestAppUI .__ init __(self、parent)
self._connectSlots()
#最初はリストは空なので、削除ボタンは機能しません
#非アクティブにする
self.deletebutton.setEnabled(False)
def _connectSlots(自己):
#信号のハンドラーをボタンにインストールする
self.connect(self.addbutton、SIGNAL( "clicked()")、self._slotAddClicked)
self.connect(self.lineedit、SIGNAL( "returnPressed()")、self._slotAddClicked)
self.connect(self.deletebutton、SIGNAL( "clicked()")、self._slotDeleteClicked)
def _slotAddClicked(self):
#lineeditからテキストを読み、
テキスト= self.lineedit.text()
#lineeditが空でない場合、
len(テキスト)の場合:
#新しいアイテムをリストに挿入...
lvi = QListViewItem(self.listview)
#lineeditからのテキスト...
lvi.setText(0、テキスト)
#およびlineeditをクリアします。
self.lineedit.clear()
#削除ボタンm オフにしたので、オンにします。
self.deletebutton.setEnabled(True)
def _slotDeleteClicked(self):
#選択したアイテムをリストから削除
self.listview.takeItem(self.listview.currentItem())
#リストが空かどうかを確認します-はいの場合、削除ボタンを無効にします。
#その後のリストが空であることが判明した場合、削除ボタンを非アクティブにします
self.listview.childCount()== 0の場合:
self.deletebutton.setEnabled(False)
__name__ == "__main__"の場合:
app = HelloApplication(sys.argv)
そして、ここに労働の結果があります:
知っておきたい
Qtデザイナーでインターフェイスを作成すると、GUIの作成が簡単になるだけでなく、Qtを学習するための優れたツールでもあります。 ウィジェットの外観をテストし、Qtで利用可能なものを確認し、使用したいプロパティを確認できます。
C ++のAPIドキュメントは、PyQtを使用する場合にも非常に役立ちます(必要に応じて読む)。 APIは非常に簡単に翻訳されているため、実践すれば、開発者向けのAPIドキュメントが本当に必要なツールの1つであることを理解できます。 KDEでの作業中に、コンバーターにqt:[widgetname]を入力できます。 T.O. qt:qbuttonは、qbuttonの説明で直接ドキュメントを開きます。
TrolltechのWebサイトには、役に立つと思われるさらに多くのドキュメントが含まれています。
このガイドの例は、Qt 3.3を使用して作成されています。 Qt 4用のpyQtの使用可能なバージョンが表示されたら、マニュアルを更新している可能性があります。