2014-03-26 39 views
1

this example從另一個類調用功能不能正常工作

幫了我很多的請問該事件工作的認識。

但我有另一個問題。當我想調用一個主類的函數時,它看起來好像是從Filter類開始的,不幸的是我無法從Designer-made文件中獲取內容。

class Filter(QtCore.QObject): 
    def eventFilter(self, widget, event): 
     if event.type() == QtCore.QEvent.FocusOut: 
      print 'focus out' 
      print widget.objectName() 
      if widget.objectName() == 'edit_notes': 
       StartQT4().object_edit_notes('edit_notes') 
      return False 
     else: 
      return False 

class StartQT4(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self._filter = Filter() 
     self.ui.edit_notes.installEventFilter(self._filter) 

    def object_edit_notes(self, w): 

     self.__init__() 
     something = self.ui.edit_notes.toPlainText() 
     something = unicode(something).encode('utf-8') 
     print something 
     return False 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = StartQT4() 
    myapp.show() 
    sys.exit(app.exec_()) 

屬性.something什麼都不打印。我試圖調用與信號方法button clicked()相同的功能,它工作正常。

你能幫我嗎?

回答

0

對於event-filter,您不需要單獨的類。任何繼承QObjectQWidget的對象都會執行,其中包括QMainWindow

所以移動事件過濾器到您的StartQT4類,像這樣:

class StartQT4(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     # filter the events through self 
     self.ui.edit_notes.installEventFilter(self) 

    def object_edit_notes(self, w): 
     # this will convert a QString to a python unicode object 
     something = unicode(self.ui.edit_notes.toPlainText()) 
     print something 

    def eventFilter(self, widget, event): 
     if (event.type() == QtCore.QEvent.FocusOut and 
      widget is self.ui.edit_notes): 
      print 'focus out' 
      self.object_edit_notes('edit_notes') 
      return False 
     return QMainWindow.eventFilter(self, widget, event) 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = StartQT4() 
    myapp.show() 
    sys.exit(app.exec_())