2016-06-17 59 views
0

我有2个单选按钮。第一个radio1连接到功能func(),并且该功能内部将按钮pushButton连接到另一个功能print_me()如何在QRadioButton上多次点击,但只运行一次?

这是剥离下来的代码:

radio = self.dockwidget.radioButton 
radio.clicked.connect(func) 

def func(): 
    # Connect pushButton to "print_me" function 
    connect = self.dockwidget.pushButton 
    connect.clicked.connect(print_me) 

def print_me(): 
    print 'Connected' 

当用户点击radio1pushButton然后,被打印的消息。问题是如果用户单击radio 10次然后pushButton,则该消息也被打印10次。或者,如果用户点击radio1,然后radio2,并返回到radio1,它仍然会打印该消息两次。

有没有一种方法可以防止这种情况发生,以便在单击单选按钮时仅打印一次消息?

+1

你可以使用它存储的功能是否已经称为一个全局变量。 –

+0

@Ashafix - 谢谢,我会检查这个,看看它是如何=) – Joseph

+1

小心与全球变量的想法。你确定你只希望函数在整个程序执行过程中运行一次吗?如果清除单选按钮(例如通过单击组中的另一个按钮),然后再次单击,是否要让该功能第二次运行?如果用户从该表单导航离开,然后再回到该表单,那该怎么办? – nephtes

回答

1

有一个全局变量并将其设置为TrueFalse。然后添加一个if语句代码(在这个例子中,全局变量名是clicked_radio_button):

radio = self.dockwidget.radioButton 
radio.clicked.connect(func) 
clicked_radio_button = False #Set global variable 
def func(): 
    if clicked_radio_button == False: 
     # Connect pushButton to "print_me" function 
     connect = self.dockwidget.pushButton 
     connect.clicked.connect(print_me) 
     clicked_radio_button = True #Set global variable to True 
    else: 
     pass #Do nothing if already pressed 

def print_me(): 
    print 'Connected' 
+0

道歉,我应该在我的问题中提到我有2个单选按钮。如果有一个,但是如果用户在2个单选按钮之间切换,这将非常有效,因为全局变量已经设置,所以不会显示任何消息。是否可以在函数中插入全局变量? – Joseph

+1

如何设置两个全局变量?然后设置'if'语句以匹配两个=] –

+0

这很有效,非常感谢;) – Joseph