如何在PyQt中获取之前激活的小部件?

时间:2013-06-29 02:24:02

标签: python user-interface pyqt

我有一个按钮和两个tablewidgets。按下按钮会做两件不同的事情,这取决于在按下按钮之前激活了哪一个tablewidgets。我怎样才能获得正确的小部件?

1 个答案:

答案 0 :(得分: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_())
相关问题