Kumar
Kumar

Reputation: 653

How to get currently focused widget Object Name in PyQt5?

How to get the currently focused widget objectName in PyQt5? Here is my code. In my code, I get object names for all widgets. And I want to Know the focused widget objectName also.

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()

Upvotes: 2

Views: 1720

Answers (1)

eyllanesc
eyllanesc

Reputation: 243897

You are trying to get the widget that has the focus before creating the window which will always be None, the solution is to detect when the focus changes through the focusChanged signal:

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())

Upvotes: 3

Related Questions