Help us understand the problem. What is going on with this article?

PySide2でイベントをオーバーライドする

More than 1 year has passed since last update.

はじめに

PySide2の各種ウィジェットには,あらかじめ動作予定のイベントが登録されている.例えば,マウスがウィジェットに乗っかった場合やクリックされた場合などが挙げられる.

これらのイベントは継承先のクラスで関数のオーバーライドをすることで,イベントに沿った動作を定義することができる.その定義の仕方を説明する.

簡単なソースコード

まずは,サンプルになる簡単なソースコードを載せる.

from PySide2.QtWidgets import QVBoxLayout, QLabel

class NewTextLabel(QLabel):
    def __init__(self, text:str, parent:QVBoxLayout):
        super().__init__("<b>{0}</b>".format(text))
        self.text = text

        parent.addWidget(self)

    def enterEvent(self, event):
        self.setText("<b style='background-color: #00ff00;'>{0}</b>".format(self.text))

    def leaveEvent(self, event):
        self.setText("<b>{0}</b>".format(self.text))

NewTextLabelクラスはQLabelクラスを継承している.QLabelクラスの先ではenterEventleaveEventが定義されている.このソースコードでは,それらの関数をオーバーライドすることで,イベントが発生したときの動作を定義している.

各種ウィジェットにはこのようなイベントが既に定義されているので,自分好みのイベントがあればオーバーライドすればいい.

問題はイベントが定義されていなかった場合になる.この場合はシグナルにスロットを接続して,スロットからイベントを発生させるしかない.イベントはシグナルからemitを呼び出されて実行される.スロットもイベントも同じではないかと言えば同じように見える.正直,なぜイベントという名前をつけているのかわからない.

この仕組みがかなり厄介で,イベントとスロットの違いについてもわかりやすく説明したサイトもない.なんとなく,コードを読んでそんなもんか,と理解するしかないのが現状なので,より多くのPySideユーザがQiitaに投稿すればデスクトップ開発も賑わうと思う.

GRGSIBERIA
なんでもやる人.元未踏クリエータ.三次元幾何学と音響工学を少々.
http://www.grgsiberia.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした