LoginSignup
9
8

More than 5 years have passed since last update.

PySide(PyQt)で.uiから作られたwidgetにeventを追加する

Last updated at Posted at 2017-09-20

はじめに

タイトル通り、PySideで.uiから作ったQLineEditにイベントを仕込みたかったのですが、classに依存した書き方が多かったのでwidgetに直接追加する方法がないか探してみました。

方法

eventFilter関数を実装したクラスをウィジェットのinstallEventFilterに引数として渡すことでイベントを監視してくれるようになります。

python
import os
import sys

from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

CURRENT_PATH = os.getenv("HOMEDRIVE") + os.getenv("HOMEPATH") + "\\Desktop"


class GUI(MayaQWidgetBaseMixin, QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(GUI, self).__init__(parent)
        loader = QUiLoader()
        uiFilePath = os.path.join(CURRENT_PATH, 'main.ui')
        self.UI = loader.load(uiFilePath)
        self.setCentralWidget(self.UI)

        self._filter = Filter()

        # eventFilterをwidgetに突っ込む
        self.UI.line.installEventFilter(self._filter)


class Filter(QtCore.QObject):
    def eventFilter(self, widget, event):
        if event.type() == QtCore.QEvent.FocusOut:
            print 'focus out'

        return False


def main():
    app = QtGui.QApplication.instance()
    ui = GUI()
    ui.show()

if __name__ == '__main__':
    main()

動作確認

フォーカスを移すことでイベントが無事取得できました。
eventfilter.gif

参考元

python - How to connect QLineEdit focusOutEvent - Stack Overflow
https://stackoverflow.com/questions/15066913/how-to-connect-qlineedit-focusoutevent

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8