如何获取具有焦点的小部件

Pla*_*ity 4 python pyqt pyqt5

如标题所示,我需要获取孩子的名字。但是,模板来自 Qt Creator,所有对象都是在程序中创建的。我不知道如何对它们进行子类化(因为我不应该更改生成的文件),因此调用后的所有对象都会返回self.sender(). 还有其他办法吗?

\n\n

编辑:

\n\n

我正在提供更多代码来重现该问题。这是生成的文件:

\n\n
from PyQt5 import QtCore, QtGui, QtWidgets\n\nclass UiBazaDanych(object):\n    def setupUi(self, MainWindow):\n        MainWindow.setObjectName("MainWindow")\n        MainWindow.resize(400, 300)\n        self.centralWidget = QtWidgets.QWidget(MainWindow)\n        self.centralWidget.setObjectName("centralWidget")\n        self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)\n        self.gridLayout.setContentsMargins(11, 11, 11, 11)\n        self.gridLayout.setSpacing(6)\n        self.gridLayout.setObjectName("gridLayout")\n        self.comboBox = QtWidgets.QComboBox(self.centralWidget)\n        self.comboBox.setObjectName("comboBox")\n        self.comboBox.addItem("")\n        self.comboBox.addItem("")\n        self.comboBox.addItem("")\n        self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)\n        self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)\n        self.lineEdit.setObjectName("lineEdit")\n        self.gridLayout.addWidget(self.lineEdit, 1, 0, 1, 1)\n        self.dateEdit = QtWidgets.QDateEdit(self.centralWidget)\n        self.dateEdit.setObjectName("dateEdit")\n        self.gridLayout.addWidget(self.dateEdit, 1, 2, 1, 1)\n        self.label_2 = QtWidgets.QLabel(self.centralWidget)\n        self.label_2.setObjectName("label_2")\n        self.gridLayout.addWidget(self.label_2, 1, 1, 1, 1)\n        self.label = QtWidgets.QLabel(self.centralWidget)\n        self.label.setObjectName("label")\n        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)\n        self.pushButton = QtWidgets.QPushButton(self.centralWidget)\n        self.pushButton.setObjectName("pushButton")\n        self.gridLayout.addWidget(self.pushButton, 2, 2, 1, 1)\n        self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralWidget)\n        self.doubleSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)\n        self.doubleSpinBox.setObjectName("doubleSpinBox")\n        self.gridLayout.addWidget(self.doubleSpinBox, 2, 0, 1, 1)\n        MainWindow.setCentralWidget(self.centralWidget)\n        self.menuBar = QtWidgets.QMenuBar(MainWindow)\n        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21))\n        self.menuBar.setObjectName("menuBar")\n        MainWindow.setMenuBar(self.menuBar)\n        self.mainToolBar = QtWidgets.QToolBar(MainWindow)\n        self.mainToolBar.setObjectName("mainToolBar")\n        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)\n        self.statusBar = QtWidgets.QStatusBar(MainWindow)\n        self.statusBar.setObjectName("statusBar")\n        MainWindow.setStatusBar(self.statusBar)\n\n        self.retranslateUi(MainWindow)\n        QtCore.QMetaObject.connectSlotsByName(MainWindow)\n\n    def retranslateUi(self, MainWindow):\n        _translate = QtCore.QCoreApplication.translate\n        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))\n        self.comboBox.setItemText(0, _translate("MainWindow", "Agnieszka"))\n        self.comboBox.setItemText(1, _translate("MainWindow", "Monika"))\n        self.comboBox.setItemText(2, _translate("MainWindow", "Zenek"))\n        self.label_2.setText(_translate("MainWindow", "zl"))\n        self.label.setText(_translate("MainWindow", "Kasjer"))\n        self.pushButton.setText(_translate("MainWindow", "WY\xc5\x9aLIJ"))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的代码:

\n\n
from PyQt5 import QtWidgets, QtCore, QtGui, QtPrintSupport\nfrom Ui_Baza_Danych import UiBazaDanych\n\nclass InputWindow(QtWidgets.QMainWindow, UiBazaDanych):\n    def __init__(self):\n        super().__init__()\n        self.setupUi(self)\n        self.show()\n        QtWidgets.QShortcut(QtCore.Qt.Key_PageDown, self, self.pagedown)\n    def pagedown(self):\n        self.focusNextPrevChild(True)\n        # here should be a method to return selected child\'s name\n\nimport sys\nfrom PyQt5.QtWidgets import QApplication\n\n\napp = QApplication(sys.argv)\nshow_all = InputWindow()\nsys.exit(app.exec_())\n
Run Code Online (Sandbox Code Playgroud)\n

eyl*_*esc 7

如果你想获得具有焦点的小部件,你必须使用 QApplication 的 focusWidget 方法:

def pagedown(self):
    self.focusNextPrevChild(True)
    widget = QtWidgets.QApplication.focusWidget()
    print(widget)
Run Code Online (Sandbox Code Playgroud)