【PyQtは入門チュートリアル] PyQt5信号とスロット

   シグナルとスロットは、プログラミングオブジェクト間の通信のためのPyQtは機構です。QWidegetコントロールから継承されたすべてのシグナルとスロット機構をサポートしています。信号伝送(送信要求)は、スロット機能は自動的に接続行われた場合(要求の処理)。本論文では、基本的なシグナルとスロット、最も頻繁に使用される方法を説明します。そして、内蔵の信号は、溝を使用するために使用されます。

内蔵の信号とスロット

  いわゆるビルトイン信号は、スロットを使用します。代わりにカスタム機能、ウィンドウ制御機能を使用して、送信された信号を意味します。信号チャネルの接続方法は、他のQObjectをQObject.signal.connectによって信号QObjectをスロット機能に接続されています。

  任意のGUIデザインで、ボタンは、ユーザと対話するための最も重要かつ一般的に使用されるトリガー・アクション要求方法です。共通のボタンはのQPushButton、QRadioButtonとQCheckBoxが含まれます。これらのボタンはQAbstractButtonクラスから継承され、QAbstractButtonの信号は、次のとおりです。

  クリック:マウスの左ボタンをクリックして、トリガ信号をリリース。最も一般的に使用されます。ほとんど十分にこのことを覚えておいてください。

  プレス:マウスの左ボタンが押されたトリガ信号

  リリース:トリガ信号をマウスの左ボタンが離されたとき

  トグル:コントロールタグが状態を変化させるトリガ信号。

 例えばビルトイン信号とスロット

  インタフェースの実装プロセスを終了するには、ボタンを実装するにはここをクリックして内蔵のシグナルとスロットを導入する必要があります。彼は仕事を始めました。

  ステップ1:オープンのQt Designerは、ウィジェットのテンプレートを選択します。ツールボックスのドラッグでメイン画面にButtonコントロールボタンを押してください。そして、制御表示名を変更します。singal.uiとして保存します。次のようにインターフェイスは、次のとおりです。

ステップ2:使用pyuic5 -o singal.py singal.uiの.pyフォーマット変換。

ステップ3:プレゼンテーションの利便性を考慮すると、プログラムはsingal.pyでメインプログラムに呼び出されます。どのMyMainFormコマンドラインクラスのプッシュボタン信号スロット機能を追加するためのボタンをクリックしてください。次のように

  self.pushButton.clicked.connect(self.close)

完全なコード(ダイレクトコピー操作、フォント太字加算部の一部)を以下に示します。

- * -コーディング:UTF-8 - - * 

#の'signal.ui'をuiファイルを読み込むから生成されたフォームの実装
#のPyQt5 UIコードジェネレータ5.11.3作成者:
#1 
#の警告!このファイルに行われたすべての変更は失われます!

インポートSYS
から PyQt5 インポートQtCore、QtGui、QtWidgets
 から PyQt5.QtWidgetsがインポートはQApplication、QMainWindow、QMessageBoxの

クラス:Ui_Form(オブジェクト)
     DEF setupUi(自己フォーム):
        Form.setObjectName(" フォーム" 
        Form.resize( 431、166
        self.pushButton = QtWidgets.QPushButton(様式)
        self.pushButton.setGeometry(QtCore.QRect( 160、50、91、41 ))
        フォント = QtGui.QFont()
        font.setFamily(" YaHei Consolasハイブリッド" 
        font.setPointSize( 14 
        self.pushButton.setFont(フォント)
        self.pushButton.setObjectName(" プッシュボタン" 

        self.retranslateUi(様式)
        QtCore.QMetaObject.connectSlotsByName(様式)

    DEF retranslateUi(自己フォーム):
        _translate =QtCore.QCoreApplication.translate 
        Form.setWindowTitle(_translate(" フォーム"" 信号与槽" ))
        self.pushButton.setText(_translate(" フォーム"" 关闭" ))

クラスMyMainForm(QMainWindow、Ui_Form):
     デフ __init__(自己、親= なし):
        スーパー(MyMainForm、自己)。__init__ (親)
        self.setupUi(自己)
        self.pushButton.clicked.connect(self.close)

の場合 __name__ == " __main__ "
    アプリ = はQApplication(sys.argvの)
    myWin = MyMainForm()
    myWin.show()
    sys.exit(app.exec_())

実行して、ウィンドウを閉じるには、以下のボタンをクリックしてください

カスタム信号を内蔵しており、例を溝

  達成するために、上述したプロセス工程と同様。カスタム関数としてShowMsgスロット機能。

  シグナルとスロット:self.pushButton.clicked.connect(self.showMsg)

完全なコード(ダイレクトコピー操作、フォント太字加算部の一部)を以下に示します。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'signal.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(431, 166)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))
        font = QtGui.QFont()
        font.setFamily("YaHei Consolas Hybrid")
        font.setPointSize(14)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "信号与槽"))
        self.pushButton.setText(_translate("Form", "运行"))

class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.showMsg)

    def showMsg(self):
        QMessageBox.information(self, "信息提示框", "OK,内置信号与自定义槽函数!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWin = MyMainForm()
    myWin.show()
    sys.exit(app.exec_())

运行结果如下:

Qt Designer添加控件信号与槽

  上述介绍的内容是通过代码方式实现内置信号与槽的连接。那Qt Designer工具可以实现信号与槽的连接?之前在第二节课Qt Designer主界面介绍时提过信号槽区域。一直没有讲如何使用。通过这个区域功能是可以实现信号与槽的连接的。

  还是以添加内置信号与槽来介绍。

  Step1:打开Qt Designer界面,找到信号槽编辑区。如下

  Step2:点击+号 Sender控件选择"PushButton"、Signal信号选择"clicked",Receiver选择"Form",内置槽函数选择"close()"

 Step3:保存.ui格式,并使用pyuic转换成.py格式,添加调用程序,运行。效果一样。这些步骤都介绍过,不再重复介绍,关键代码如下:

小结

  本文介绍了PyQt5信号与槽最基本的使用方法。知道如何在Qt Designer生成的.py文件中添加控件信号与槽的关系并且知道如何调用自定义槽函数。掌握了这些,应该就可以动手实现一些基本的需求了。

  到这里,按照这几个章节的介绍应该可以动手完成简单需求的实现。至于更进一步的学习,可以通过实践过程中遇到的问题以及小工具开发需求去驱动加深理解可能效果会好一点。

おすすめ

転載: www.cnblogs.com/linyfeng/p/11273062.html