はじめに
タイトル通り、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()
動作確認
参考元
python - How to connect QLineEdit focusOutEvent - Stack Overflow
https://stackoverflow.com/questions/15066913/how-to-connect-qlineedit-focusoutevent