PythonでのQtベースのアプリケーションの作成

良い時間です。

最近、別のプログラミング言語を学ぶことにしました。 選択肢はpythonに落ちました。 いくつかの小さなスクリプトを書きました。 しかし、まず第一に、GUIアプリケーションを作成したかったのです。 インターネット上で、この小さなチュートリアルに出会いました。このチュートリアルを読んだ結果、翻訳が注目されました。 誰かがそれを役に立つと思うことを願っています。





このチュートリアルの目的は、Qtライブラリを使用して小さなPythonアプリケーションを作成する方法を理解することです。





すべてのタスクを正常に完了するには、Pythonの基本的な知識が必要ですが、Qtを知る必要はありません。 これらの例ではLinuxを使用していますが、既にPythonPyQtが実行されていると仮定しています。 これを確認するには、コンソールで「python」と入力してpythonシェルを開き、次のように入力します。



 インポートqt 




エラーメッセージが表示されない場合は、開始する準備ができています。 このガイドの例は可能な限り簡略化されており、プログラムの作成と構造化に役立つ方法を示しています。 サンプルのソースコードを読むことが重要です;ほとんどのことはそこで説明されています。 例を使用して、それらを変更してみてください。 これは慣れるのに最適な方法です。



こんにちは世界!



簡単なものから始めましょう。 プログラムはウィンドウを開き、何かを表示します。 以下のコードは、「Hello、world!」というウィンドウを示しています。 明らかに。



  #!/ usr / bin / python
インポートシステム
 qt importから*
 #アプリケーションを作成して引数を渡す
 a = QApplication(sys.argv)
 #ウィジェットを作成
 #最初の引数は、見たいテキストです。
 #2番目の引数は親ウィジェットです。 
 #なぜなら こんにちはは唯一のウィジェットで、親はありません
 hello = QLabel(「H​​ello 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を作成します。 写真では、シンプルなインターフェースを見ることができます。 ウィジェットの名前は緑色で書かれています。 必要なことはすべて

  1. Qtデザイナーから.uiファイルをPythonクラスにコンパイルします
  2. サブクラスを作成し、mainWidgetとして使用します


したがって、コードを掘り下げることなくQtデザイナーでインターフェイスを変更できます。



チーム

  pyuic testapp_ui.ui -o testapp_ui.py 




使用できるpythonクラスを作成します。



プログラムの作業は次のように説明できます。

  1. ラインエディットを埋める
  2. 追加ボタンをクリックして、lineeditからテキストを読み取り、それをリストビューに追加するメソッドをアタッチします
  3. 削除ボタンをクリックすると、選択したアイテムがリストビューから削除されます。


コメント付きのコードは次のとおりです。

  #!/ 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の使用可能なバージョンが表示されたら、マニュアルを更新している可能性があります。




All Articles