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

最佳答案

例如,您可以使用 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_())

关于python - 如何在 PyQt 中获取先前激活的小部件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17376085/

10-11 19:34