python - 如何在 PyQt5 中获取当前聚焦的小部件对象名称?

标签 python pyqt pyqt5

如何在PyQt5中获取当前聚焦的小部件objectName?这是我的代码。在我的代码中,我获取所有小部件的对象名称。我也想知道聚焦的小部件对象名称。

import sys

from PyQt5.QtWidgets import *
class Check(QWidget):
    
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Check Window")
        self.textbox1 = QLineEdit(self)
        self.textbox1.setGeometry(100, 100, 300, 30)
        self.textbox2 = QLineEdit(self)
        self.textbox2.setGeometry(100, 150, 300, 30)
        self.textbox3 = QLineEdit(self)
        self.textbox3.setGeometry(100, 200, 300, 30)

        self.lbox1 = QListWidget()
        self.lbox2 = QListWidget(self)
        self.lbox2.setGeometry(100,250,300,500)
        self.textbox1.setObjectName("textbox1")
        self.textbox2.setObjectName("textbox2")
        self.textbox3.setObjectName("textbox3")

        self.updateallwidgets()
        self.focuwidget()

    def updateallwidgets(self):
        QWidget.allwidgets = QApplication.allWidgets()
        for i in QWidget.allwidgets:
            j = i.objectName()


    def focuwidget(self):
        fwidget = QApplication.focusWidget()
        print("focus widget name ",fwidget)

def main():
    myapp = QApplication(sys.argv)
    mywin = Check()
    mywin.show()
    sys.exit(myapp.exec_())

if __name__ == "__main__":
    main()

最佳答案

您试图在创建窗口之前获取具有焦点的小部件,该窗口始终为 None,解决方案是通过 focusChanged 信号检测焦点何时发生变化:

class Check(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Check Window")
        self.textbox1 = QLineEdit(self)
        self.textbox1.setGeometry(100, 100, 300, 30)
        self.textbox2 = QLineEdit(self)
        self.textbox2.setGeometry(100, 150, 300, 30)
        self.textbox3 = QLineEdit(self)
        self.textbox3.setGeometry(100, 200, 300, 30)

        self.lbox1 = QListWidget()
        self.lbox2 = QListWidget(self)
        self.lbox2.setGeometry(100, 250, 300, 500)
        self.textbox1.setObjectName("textbox1")
        self.textbox2.setObjectName("textbox2")
        self.textbox3.setObjectName("textbox3")

        QApplication.instance().focusChanged.connect(self.on_focusChanged)

    def on_focusChanged(self):
        fwidget = QApplication.focusWidget()
        if fwidget is not None:
            print("focus widget name ", fwidget.objectName())

关于python - 如何在 PyQt5 中获取当前聚焦的小部件对象名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62742104/

相关文章:

python - 通过 Python API 创建 Bigquery 表

python - Python中的此Unbound Local错误是什么意思?

python - PyQt QSplitter setSizes 用法

python - pyqtgraph中的极坐标系

python - 通过 Sendgrid API 发送电子邮件时出错

python - 检查列表中的索引是否存在

python - 如何将 .ui 文件转换为 .py 文件

qt - QGraphicsLayout - 项目之间出现意外的额外间距

python - PyQt5:如何从系统托盘图标上下文菜单启动窗口?

python - PyQt5中QTextBrowser中的回车