2016-06-14 14 views
0

저는 PyQt를 처음 접했기 때문에 어디서부터 검색해야할지 모르겠습니다.PyQt의 QRadioButton 옵션에 따라 다른 QPushbuttons를 자동으로 활성화하십시오.

그래서 QRadioButtons에는 두 개의 QPushButtons (각각 하나씩)에 해당하는 두 가지 옵션이 있습니다.

기본적으로, 나는 내가 만약 문을 사용하여이를 달성하기 위해 노력하는 다음 코드가 있습니다

def tab1UI(self): 

    mytabfont = QFont('Lucida Sans Unicode', 9)  
    layout = QFormLayout() 
    #self.setTabText(0,"My Data") 
    self.tab1.setLayout(layout) 

    tabdescription = 'To obtain or generate data choose an option below:' 
    # radio options 



    label1 = QLabel(tabdescription) 
    label1.setFont(mytabfont) 
    layout.addWidget(label1) 

    radiobtn1 = QRadioButton('Load data from file') 
    radiobtn1.setChecked(True) 

    #why does my resize not work? 
    radiobtn1.resize(100,100) 

    radiobtn1.setFont(mytabfont) 
    layout.addWidget(radiobtn1) 
    loadbtn = QPushButton('Open CSV file...') 
    layout.addWidget(loadbtn) 

    radiobtn2 = QRadioButton('Generate data') 
    radiobtn2.setFont(mytabfont) 
    genbtn= QPushButton('Generating matrix...') 
    layout.addWidget(radiobtn2) 
    layout.addWidget(genbtn) 



    if radiobtn1.isChecked(): 

     # if this option is clicked then this button needs to be activated else it must be de-activated 
     loadbtn.setEnabled(True) 
     genbtn.setEnabled(False) 

    elif radiobtn2.isChecked(): 

     loadbtn.setEnabled(False) 
     genbtn.setEnabled(True) 

    else: 

     loadbtn.setEnabled(False) 
     genbtn.setEnabled(False) 

그래서를, 내가 한 라디오 버튼 옵션을 클릭 할 때마다 내가 자동으로 활성화 한 푸시 버튼을 싶습니다 또는 대신 다른 옵션을 선택하면 비활성입니다. 연결하려면 어떤 종류의 조치가 있어야하지만 이에 대해 어떻게해야하는지 잘 모르는 경우가 있습니다.

답변

1

버튼을 처음 만들 때 if 문을 한 번만 실행합니다. 이 작업을 수행하려면 if마다 라디오 버튼 확인 상태가 변경 될 때마다 평가해야합니다. Qt을 사용하면 SignalsSlots으로이 작업을 수행 할 수 있습니다. QRadioButton은 체크 상태를 변경할 때 신호를 내 보냅니다. 이 신호에 연결하여 다른 버튼의 활성화 상태를 업데이트하는 기능을 실행할 수 있습니다.

def tab1UI(self): 
    mytabfont = QFont('Lucida Sans Unicode', 9)  
    layout = QFormLayout() 
    self.tab1.setLayout(layout) 

    tabdescription = 'To obtain or generate data choose an option below:' 
    # radio options 
    self.label1 = QLabel(tabdescription) 
    self.label1.setFont(mytabfont) 
    layout.addWidget(self.label1) 

    self.radiobtn1 = QRadioButton('Load data from file') 
    self.radiobtn1.setChecked(True) 

    self.radiobtn1.setFont(mytabfont) 
    layout.addWidget(self.radiobtn1) 
    self.loadbtn = QPushButton('Open CSV file...') 
    layout.addWidget(self.loadbtn) 

    self.radiobtn2 = QRadioButton('Generate data') 
    self.radiobtn2.setFont(mytabfont) 
    self.genbtn= QPushButton('Generating matrix...') 
    layout.addWidget(self.radiobtn2) 
    layout.addWidget(self.genbtn) 

    self.radiobtn1.toggled.connect(self.refresh_button_state) 
    self.radiobtn2.toggled.connect(self.refresh_button_state) 

    self.refresh_button_state() 


def refresh_button_state(self): 
    if self.radiobtn1.isChecked(): 
     self.loadbtn.setEnabled(True) 
     self.genbtn.setEnabled(False) 
    elif self.radiobtn2.isChecked(): 
     self.loadbtn.setEnabled(False) 
     self.genbtn.setEnabled(True) 
    else: 
     self.loadbtn.setEnabled(False) 
     self.genbtn.setEnabled(False) 
+0

감사합니다. 나는 그것을 곧 시도 할 것이고 당신이 대답을 알리고 받아들이도록 할 것이다. 나는 신호와 슬롯에 관해서도 몰랐다. –

+0

코드가 처음 실행되었을 때'layout.addWidget (self.radiobtn2)'줄 아래에'self.genbtn.setEnabled (False)'가 추가되었으므로 두 버튼이 모두 활성화되어 있고 원하지 않습니다. 감사! –