Reputation: 653
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
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