Python - 调用方法的次数超过

时间:2016-05-05 18:32:36

标签: python qt pyqt pyqt4

我正在使用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))

1 个答案:

答案 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))