2016-06-17 9 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' 

Когда пользователь щелкает radio1, а затем pushButton, печатается сообщение. Проблема в том, что пользователь нажимает radio 10 раз, а затем pushButton, сообщение также печатается 10 раз. Или, если пользователь нажимает radio1, то radio2 и обратно до radio1, он все равно распечатает сообщение дважды.

Есть ли способ предотвратить это, чтобы он печатал сообщение только один раз, когда нажата кнопка радиосвязи?

+1

вы можете использовать глобальную переменную, которая хранит ли функция уже называется. –

+0

@Ashafix - Спасибо, я проверю это и посмотрю, как он идет =) – Joseph

+1

Осторожно с идеей глобальной переменной. Вы уверены, что хотите, чтобы функция выполнялась только один раз во время всего выполнения программы? Если радиокнопка очищается (например, нажав на другую кнопку в группе), а затем снова щелкнув, вы хотите, чтобы функция выполнялась во второй раз? Как насчет того, если пользователь переходит от этой формы, а затем возвращается к ней? – nephtes

ответ

1

Имейте глобальную переменную и установите ее либо True, либо False. Затем добавьте 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 переключателя. Это отлично работает, если есть, но если пользователь переключается между двумя переключателями, сообщения не печатаются, поскольку глобальная переменная уже установлена. Можно ли вставить глобальную переменную внутри функции? – Joseph

+1

Как установить две глобальные переменные? а затем установите оператор 'if', чтобы он соответствовал обоим =] –

+0

Это работает, большое спасибо;) – Joseph