2016-06-17 5 views
0

두 개의 라디오 버튼이 있습니다. 첫 번째 것은 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으로 설정하십시오. 그리고 (이 예에서는 전역 변수 이름은 clicked_radio_button입니다) 코드에 if 문을 추가 :

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

관련 문제