我正在使用PyQt开发一个应用程序。我有不同的按钮连接到方法subeventos
。
当调用该方法时,它从数据库中获取数据(数据取决于单击的按钮),在列表中组织所述数据并替换几个单选按钮'具有该列表中每个元素的字符串的名称。这些单选按钮是在Qt-Designer中创建的。
选中(切换)单选按钮后,它会连接到方法radio_clicked
。
我第一次启动应用并检查单选按钮时,它会调用方法radio_clicked
一次,就像它应该的那样。之后,如果我选择一个不同的单选按钮,它现在调用方法radio_clicked
两次,它不应该。如果我返回并选择一个不同的按钮并选择一个随机单选按钮,它将调用方法radio_clicked
4次,依此类推。这是不可取的,该方法应始终只调用一次。
代码如下。你能帮助我理解为什么会这样,以及如何避免它?谢谢。
def subeventos(self, evento):
self.set_tab(4)
subeventos=["NULL","NULL","NULL","NULL","NULL","NULL","NULL"] #lista nula
query="SELECT subeventos from eventos_e_subeventos WHERE evento='"+evento+"';"
cur.execute(query)
subeventos_fetch=str(cur.fetchall()).strip("[(u',')]").decode('unicode-escape')
subeventos_split=subeventos_fetch.split(",")
for i, subevento in enumerate(subeventos_split):
subeventos[i]=subevento
for i,subevento in enumerate(subeventos): #Apresente o nome dos subeventos nos RadioButtons dinamicamente
radiobutton="R"+str(i+1)
if subevento=="NULL": #Se não exisitr subevento, não mostrar botão
getattr(self, radiobutton).setVisible(False)
else:
getattr(self, radiobutton).setVisible(True)
getattr(self, radiobutton).setText(subevento)
getattr(self, radiobutton).toggled.connect(lambda: self.radio_clicked(evento))
def radio_clicked(self, evento):
print "I got here!"
radiobutton=str(self.sender().objectName())
subevento=getattr(self,radiobutton).text()
self.BotaoConfirmarSubeventos.clicked.connect(lambda: self.update_database(evento, subevento))
答案 0 :(得分:0)
radio_clicked调用是否来自同一个radiobutton?或不同的radiobuttons?无论何时打开或关闭,都会触发toggle.connect信号,而不仅仅是打开。因此,如果您有两个单选按钮,当您单击其他单选按钮时,它将发送两个toggle.connect,一个用于radiobutton1,另一个用于radiobutton2,而不仅仅是已经检查的那个。如果这是问题,您可以添加
if self.radiobutton.isChecked():
subevento=getattr(self,radiobutton).text()
self.BotaoConfirmarSubeventos.clicked.connect(lambda: self.update_database(evento, subevento))