根据PyQt中的QRadioButton选项自动启用不同的QPush按钮

时间:2016-06-14 16:43:20

标签: python pyqt pyqt4 qpushbutton qradiobutton

我对PyQt很新,所以我甚至不确定从哪里开始搜索。

所以我有两个不同的QRadioButtons选项,理想情况下它们对应两个QPushButtons,每个选项各一个。

基本上,我有以下代码,我试图通过使用if语句实现这一点:

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 个答案:

答案 0 :(得分:2)

首次创建按钮时,您只运行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)