如何在pyQt中获得激活的lineEdit或标签

问题描述 投票:0回答:1

我正在尝试获得一个lineEdit,它在单击按钮时在其中有一个光标。例如:我运行应用程序,将光标放在一个lineEdit中,然后单击按钮时-应该在所选的lineEdit中设置一些文本。

我已经尝试过keyboardGrabber,但它返回的按钮= None。

import sys
from PyQt5 import QtWidgets, QtCore


class Mainwindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("window")
        self.lineEdit1 = QtWidgets.QLineEdit()
        self.lineEdit2 = QtWidgets.QLineEdit()
        self.lineEdit3 = QtWidgets.QLineEdit()
        self.pushButton = QtWidgets.QPushButton()
        self.label = QtWidgets.QLabel()
        self.label.setText('#1')
        self.frame = QtWidgets.QFrame(self)
        self.frame.setGeometry(QtCore.QRect(0, 0, 200, 100))
        self.gridLayout =  QtWidgets.QGridLayout(self.frame)
        self.gridLayout.addWidget(self.lineEdit1, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.lineEdit2, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.lineEdit3, 0, 2, 1, 1)
        self.gridLayout.addWidget(self.label, 0, 3, 1, 1)
        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)

        self.pushButton.clicked.connect(self.function)

    def function(self):
        widget = self.keyboardGrabber()
        widget.setText('some text')



if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    application = Mainwindow()
    application.show()
python pyqt pyqt5 qlineedit
1个回答
0
投票

尝试:void QApplication::focusChanged(QWidget *old, QWidget *now)

当具有键盘焦点的窗口小部件从旧更改为现在时,即由于用户按下Tab键,单击窗口小部件或更改了活动窗口,则发出此信号。老和现在都可以为nullptr。

import sys
from PyQt5 import QtWidgets, QtCore


class Mainwindow(QtWidgets.QMainWindow):  # QMainWindow  QWidget
    def __init__(self):
        super().__init__()

        QtWidgets.qApp.focusChanged.connect(self.on_focusChanged)       # +++

        self.setWindowTitle("window")
        self.lineEdit1 = QtWidgets.QLineEdit(self)
        self.lineEdit1.setFocus()                                       # +

        self.lineEdit2 = QtWidgets.QLineEdit()
        self.lineEdit3 = QtWidgets.QLineEdit()
        self.pushButton = QtWidgets.QPushButton()
        self.label = QtWidgets.QLabel()
        self.label.setText('#1')

        self.frame = QtWidgets.QFrame(self)
        self.setCentralWidget(self.frame)                               # +
        self.frame.setGeometry(QtCore.QRect(0, 0, 200, 100))
        self.gridLayout =  QtWidgets.QGridLayout(self.frame)

        self.gridLayout.addWidget(self.lineEdit1, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.lineEdit2, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.lineEdit3, 0, 2, 1, 1)
        self.gridLayout.addWidget(self.label, 0, 3, 1, 1)
        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)

        self.lineFocus = ...                                             # +++
        self.pushButton.clicked.connect(self.function)

    def function(self):
#        widget = self.keyboardGrabber()
#        widget.setText('some text')
        self.lineFocus.setText('some text')

    @QtCore.pyqtSlot("QWidget*", "QWidget*")
    def on_focusChanged(self, old, now):                                 # +++
        #print(f"\nold: {old}, now: {now}")
        self.lineFocus = old 


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    application = Mainwindow()
    application.show()
    sys.exit(app.exec_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.