2016-06-17 102 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