2016-06-14 6 views
0

Я очень новичок в PyQt, поэтому я даже не уверен, с чего начать поиск.Автоматическое включение различных QPushbuttons в соответствии с параметрами QRadioButton в PyQt

Итак, у меня есть два разных варианта для 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 позволяет сделать это с помощью Signals и Slots. 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

Добавил 'self.genbtn.setEnabled (False)' под строку 'layout.addWidget (self.radiobtn2)', поскольку первый раз, когда код запускал обе кнопки, был включен и не хотел этого. Благодаря! –