PyQt中根据QRadioButton选项自动启用不同的QPushbutton

Automatically enabling different QPushbuttons according to QRadioButton options in PyQt

我是 PyQt 的新手,所以我什至不知道从哪里开始搜索这个。

所以我有两个不同的 QRadioButton 选项,理想情况下对应两个 QPushButton,每个一个。

基本上,我有以下代码,我试图通过使用 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)

因此,每当我单击一个单选按钮选项时,我希望一个按钮在另一个选项被选中时自动变为活动或非活动状态。 必须要连接某种操作,但不确定如何进行。

您只需要 运行 一次 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)