PySide (PyQt)로 .ui에서 만든 위젯에 이벤트 추가

소개



타이틀대로 PySide에서 .ui에서 만든 QLineEdit에 이벤트를 넣고 싶었는데 class에 의존하는 쓰기가 많았기 때문에 widget에 직접 추가하는 방법이 없는지 찾아 보았습니다.

방법



eventFilter 함수를 구현한 클래스를 위젯의 installEventFilter에 인수로서 건네주는 것으로 이벤트를 감시해 줍니다.

파이썬
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()

동작 확인



포커스를 옮기는 것으로 이벤트를 무사히 취득할 수 있었습니다.


참고원



파이썬 - How to connect QLineEdit focusOutEvent - Stack Overflow
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 15066913 / 호 w - 콘 ct q q ぃ 네 ぢ t

좋은 웹페이지 즐겨찾기