この記事では、PyQt5 で毎日学習する必要があるイベントとシグナルに関する関連情報を主に詳しく紹介します。興味のある方は参考にしてください。
このパートでは、PyQt5 のイベントとシグナルについて説明します。アプリケーションに実装する方法。
イベント
すべての GUI アプリケーションはイベント駆動型です。アプリケーション イベントは主にユーザーによって生成されますが、インターネット接続、ウィンドウ マネージャー、タイマーなどの他の方法によって生成されることもあります。アプリケーションの exec_() メソッドを呼び出すと、アプリケーションはメイン ループに入ります。メインループはさまざまなイベントを検出し、イベントオブジェクトに送信します。
イベント モデルには、次の 3 つの参加者があります:
イベント ソース (イベント ソース)
イベント オブジェクト (イベント オブジェクト)
イベント ターゲット (イベント ターゲット)
イベント ソースis イベントは、オブジェクトの状態が変化すると生成されます。イベント オブジェクト (イベント) は、イベント ソース内の状態変化をカプセル化するオブジェクトです。イベントターゲットは、通知を受け取りたいオブジェクトです。イベント ソース オブジェクトは、イベント ターゲットに対するイベントを処理するタスクを表します。
PyQt5 は、独自のシグナルとスロットのメカニズムを使用してイベントを処理します。シグナルとスロットは、オブジェクト間の通信に使用され、特定のイベントが発生するとシグナルが発行されます。スロットには任意の Python 呼び出しを使用できます。信号は、それに接続されているスロットが呼び出されるときに送信されます。
シグナルとスロットシグナルとスロット
これは、PyQt5 のシグナルとスロットを示す簡単な例です。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ PyQt5 教程 这个例子中,我们将QSlider的滑动信号连接到QLCDNumber中。 作者:我的世界你曾经来过 博客:http://blog.csdn.net/weiaitaowang 最后编辑:2016年8月1日 """ import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSlider, QLCDNumber, QVBoxLayout) from PyQt5.QtCore import Qt class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): lcd = QLCDNumber(self) sld = QSlider(Qt.Horizontal, self) vbox = QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(sld) self.setLayout(vbox) sld.valueChanged.connect(lcd.display) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('信号/槽') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
この例では、QtGui.QLCDNumber と QtGui.QSlider が使用されます。スライダーをドラッグして LCD の番号を変更します。
sld.valueChanged.connect(lcd.display)
ここで、スライダーのvalueChanged信号はLCDの表示スロットに接続されています。
送信者は信号を送信するオブジェクトです。受信機は信号を受信するオブジェクトです。スロットは信号へのフィードバック方法です。
プログラム実行後
システムイベントハンドラーを上書きする
PyQt5でのイベント処理はイベントハンドラーを書き換えることで行われることが多いです。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ PyQt5 教程 在这个例子中,我们执行事件处理程序。 作者:我的世界你曾经来过 博客:http://blog.csdn.net/weiaitaowang 最后编辑:2016年8月1日 """ import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 250, 150) self.setWindowTitle('事件处理') self.show() def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
この場合、keyPressEvent() イベント ハンドラーを再実装します。
def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close()
キーボードのEscキーを押すと、アプリケーションが終了します。
イベント送信側イベント送信
同じイベントターゲットに接続されている複数のイベントソースを簡単に区別するために、PyQt5ではsender()メソッドを使用できます。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ PyQt5 教程 在这个例子中,我们确定事件发送对象。 作者:我的世界你曾经来过 博客:http://blog.csdn.net/weiaitaowang 最后编辑:2016年8月1日 """ import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): btn1 = QPushButton('按钮一', self) btn1.move(30, 50) btn2 = QPushButton('按钮二', self) btn2.move(150, 50) btn1.clicked.connect(self.buttonClicked) btn2.clicked.connect(self.buttonClicked) self.statusBar() self.setGeometry(300, 300, 300, 150) self.setWindowTitle('事件发送') self.show() def buttonClicked(self): sender = self.sender() self.statusBar().showMessage(sender.text() + ' 被按下') if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
この場合、ボタンは 2 つあります。どちらのボタンも buttonClicked() メソッドに接続されており、クリックされたボタンに応答して sender() メソッドを呼び出します。
btn1.clicked.connect(self.buttonClicked) btn2.clicked.connect(self.buttonClicked)
2 つのボタンが同じスロットに接続されています。
def buttonClicked(self): sender = self.sender() self.statusBar().showMessage(sender.text() + ' 被按下')
sender() メソッドを呼び出して信号ソースを特定します。アプリケーションのステータスバーに、押されたボタンのラベルが表示されます。
プログラムの実行後
カスタマイズされたシグナルの放出
QObject から作成されたオブジェクトはシグナルを放出できます。以下の例では、送信される信号をカスタマイズする方法を見ていきます。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ PyQt5 教程 在这个例子中,我们显示了如何以发射信号。 作者:我的世界你曾经来过 博客:http://blog.csdn.net/weiaitaowang 最后编辑:2016年8月1日 """ import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtCore import pyqtSignal, QObject class Communicate(QObject): closeApp = pyqtSignal() class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.c = Communicate() self.c.closeApp.connect(self.close) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('发射信号') self.show() def mousePressEvent(self, event): self.c.closeApp.emit() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
closeApp という新しいシグナルを作成します。この信号はマウス プレス イベントを発行します。この信号は QMainWindow の close() スロットに接続されます。
class Communicate(QObject): closeApp = pyqtSignal()
QObject から継承した Communicate クラスを作成します。これは、pyqtSignal() クラスのプロパティを持ちます。
self.c = Communicate() self.c.closeApp.connect(self.close)
カスタム closeApp シグナルを QMainWindow の close() スロットに接続します。
def mousePressEvent(self, event): self.c.closeApp.emit()
マウスがプログラムウィンドウをクリックすると、closeAppシグナルが発せられます(emit)。アプリケーションは終了しました。
関連する推奨事項:
PyQtはインターフェースフリップスイッチング効果を実装します
以上がPyQt5 で毎日学習する必要があるイベントとシグナルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...

正規表現を使用して、最初の閉じたタグと停止に一致する方法は? HTMLまたは他のマークアップ言語を扱う場合、しばしば正規表現が必要です...

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1
使いやすく無料のコードエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック



