2013-06-29 33 views

回答

2

例如,你可以使用focusInEvent存储部件激活并返回按下按钮,这样的事情时:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtGui, QtCore 

class MyTableWidget(QtGui.QTableWidget): 
    focusIn = QtCore.pyqtSignal(QtCore.QObject) 

    def __init__(self, parent=None): 
     super(MyTableWidget, self).__init__(parent) 

    def focusInEvent(self, event): 
     self.focusIn.emit(self) 

     return super(MyTableWidget, self).focusInEvent(event) 

class MyWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent)  

     self.lastFocusedTableWidget = None 

     self.tableWidgetFirst = MyTableWidget(self) 
     self.tableWidgetFirst.setObjectName("tableWidgetFirst") 
     self.tableWidgetFirst.focusIn.connect(self.on_tableWidget_focusIn) 

     self.tableWidgetSecond = MyTableWidget(self) 
     self.tableWidgetSecond.setObjectName("tableWidgetSecond") 
     self.tableWidgetSecond.focusIn.connect(self.on_tableWidget_focusIn) 

     self.pushButtonLastFocused = QtGui.QPushButton(self) 
     self.pushButtonLastFocused.setText("Print the last focused QTableWidget!") 
     self.pushButtonLastFocused.clicked.connect(self.on_pushButtonLastFocused_clicked) 

     self.layoutVertical = QtGui.QVBoxLayout(self) 
     self.layoutVertical.addWidget(self.tableWidgetFirst) 
     self.layoutVertical.addWidget(self.tableWidgetSecond) 
     self.layoutVertical.addWidget(self.pushButtonLastFocused) 

    @QtCore.pyqtSlot(QtCore.QObject) 
    def on_tableWidget_focusIn(self, obj): 
     self.lastFocusedTableWidget = obj 

    @QtCore.pyqtSlot() 
    def on_pushButtonLastFocused_clicked(self): 
     print self.lastFocusedTableWidget.objectName() 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.resize(333, 111) 
    main.show() 

    sys.exit(app.exec_()) 
+0

能当发射的focusIn信号需要解释呢? – GiannisIordanou

相关问题