的先生们。
我有非常简单的PyQT5应用程序。 我已经动态创建了按钮并连接到某个功能。
class App(QWidget):
...
def createButtons(self):
...
for param in params:
print("placing button "+param)
button = QPushButton(param, checkable=True)
button.clicked.connect(lambda: self.commander())
我有指挥官方法:
def commander(self):
print(self.sender().text())
所以我可以访问点击按钮。 但是,如果我想访问之前点击的按钮怎么办?还是主窗口中的另一个元素?怎么做?
我想要的是什么:
def commander(self):
print(self.sender().text())
pressedbutton = self.findButtonByText("testbutton")
pressedbutton.setChecked(False)
或者
pressedbutton = self.findButtonBySomeKindOfID(3)
pressedbutton.setChecked(False)
任何帮助将不胜感激!
答案 0 :(得分:2)
您可以使用地图并保存按钮的实例。 如果需要,可以将按钮文本用作键或id。 如果您使用按钮文本作为键,则不能有两个具有相同标签的按钮。
class App(QWidget):
def __init__(self):
super(App,self).__init__()
button_map = {}
self.createButtons()
def createButtons(self):
...
for param in params:
print("placing button "+param)
button = QPushButton(param, checkable=True)
button.clicked.connect(lambda: self.commander())
# Save each button in the map after the setting of the button text property
self.saveButton(button)
def saveButton(self,obj):
"""
Saves the button in the map
:param obj: the QPushButton object
"""
button_map[obj.text()] = obj
def findButtonByText(self,text)
"""
Returns the QPushButton instance
:param text: the button text
:return the QPushButton object
"""
return button_map[text]