2017-01-23 6 views
0

Я новичок в PyQt. Я разработал форму в QtDeveloper, которая имеет три элемента управления. Одна кнопка, один поле со списком и одна строка. Имя виджета редактирования строки в моей форме ui - myLineEdit. Я хочу знать, какой Qwidget получил фокус (QLineEdit или QComboBox). Я реализую код, полученный из Интернета. При запуске кода создается отдельное редактирование строки, и оно отлично работает. Но я хочу дать focusInEvent виджет myLineEdit, созданный в форме .ui. Мой код указан. Пожалуйста помоги.Как узнать, какой qwidget в форме ui получил фокус в pyqt

class MyLineEdit(QtGui.QLineEdit): 
    def __init__(self, parent=None): 
     super(MyLineEdit, self).__init__(parent) 
    def focusInEvent(self, event): 
     print 'focus in event' 
     self.clear() 
     QLineEdit.focusInEvent(self, QFocusEvent(QEvent.FocusIn)) 

class MainWindow(QtGui.QMainWindow,Ui_MainWindow): 
    def __init__(self, parent = None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 
     self.myLineEdit = MyLineEdit(self) 

ответ

2

Вы должны реализовать метод eventFilter и включить это свойство для виджетов, которые необходимы с:

{your widget}.installEventFilter(self) 

Метод eventFilter имеет в качестве информации объекта и тип события.

Пример

import sys 
from PyQt5 import uic 
from PyQt5.QtCore import QEvent 
from PyQt5.QtWidgets import QApplication, QWidget 

uiFile = "widget.ui" # Enter file here. 

Ui_Widget, _ = uic.loadUiType(uiFile) 


class Widget(QWidget, Ui_Widget): 
    def __init__(self, parent=None): 
     super(Widget, self).__init__(parent=parent) 
     self.setupUi(self) 
     self.lineEdit.installEventFilter(self) 
     self.pushButton.installEventFilter(self) 
     self.comboBox.installEventFilter(self) 

    def eventFilter(self, obj, event): 
     if event.type() == QEvent.FocusIn: 
      if obj == self.lineEdit: 
       print("lineedit") 
      elif obj == self.pushButton: 
       print("pushbutton") 
      elif obj == self.comboBox: 
       print("combobox") 
     return super(Widget, self).eventFilter(obj, event) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = Widget() 
    w.show() 
    sys.exit(app.exec_()) 

enter image description here

Ouput:

lineedit 
pushbutton 
combobox 
pushbutton 
lineedit 
+0

Он работал как шарм. Спасибо дорогой. –

Смежные вопросы