当我点击创建按钮时,我正在尝试创建一个新的 'Qradiobutton'

I'm trying to make a new 'Qradiobutton' when I click on create button

当我点击创建按钮时,我试图创建一个新的 'Qradiobutton'...但是该按钮只创建了一个 Qradiobutton。有什么建议吗???

我的代码:

import sys
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QWidget, QPushButton, QRadioButton
)

class main(QMainWindow):
    def __init__(self):
        super().__init__()

        self.newUi()

        self.setGeometry(400, 400, 500, 500)
        self.setWindowTitle('Create')
        self.show()

        self.radio1 = QRadioButton('first', self)
        self.radio1.setGeometry(50, 50, 60, 20)

        self.radio2 = QRadioButton('second', self)
        self.radio2.setGeometry(50, 90, 60, 20)

        self.radio3 = QRadioButton('third', self)
        self.radio3.setGeometry(50, 130, 60, 20)

    def newUi(self):
        self.btn = QPushButton('create', self)

        self.btn.clicked.connect(self.create)


    def create(self):
        n = 1

        if n == 1:
            self.radio1.show()
            n = 2

        elif n == 2:
            self.radio2.show()
            n == 3

        elif n == 3:
            self.radio3.show()

        else:
            print('done')



if __name__ == "__main__":
    app = QApplication(sys.argv)
    e = main()
    app.exec()

您不是在创建 QRadioButton,而是使现有的单选按钮可见。在您的情况下,问题是 n 始终为 1,因此它只会使与 n = 1 相关联的单选按钮可见,每次单击都必须增加 n 的值。

注意:在你的例子中,“n”是一个会被立即销毁的局部变量,所以每次点击n都是1。

def newUi(self):
    self.btn = QPushButton('create', self)
    self.n = 0
    self.btn.clicked.connect(self.create)


def create(self):
    self.n +=  1
    if self.n == 1:
        self.radio1.adjustSize()
        self.radio1.show()
        

    elif self.n == 2:
        self.radio2.adjustSize()
        self.radio2.show()

    elif self.n == 3:
        self.radio3.adjustSize()
        self.radio3.show()

    else:
        print('done')

代码中的第一个问题是您在函数开头将 n 变量声明为 1。无论您在那之后做什么,每次调用 create 函数时,您总是将 n 设置为 1,因此您的其他 elif/else 语句将永远不会被处理。

然后,即使假设您没有执行上述操作,您在那里声明的内容称为 local 变量:它是一个仅存在于 create 函数,并在该函数 returns.

后立即从内存中完全删除

解决方案是使该变量持久,确保它不会被删除并“尽可能长地”保持活动状态。
解决此问题的常见尝试是使用 global 变量(函数最开头的语句 global n)。这也是一个常见的错误,因此 永远不要 用于此类原因。全局变量不适用于这种用法,使用它们通常会导致误解和意外行为,从而产生很难跟踪的“无声错误”。

正确的解决方案是创建一个实例属性,它是实例成员的变量。

为此,您必须在 检查或更改属性之前 声明该属性,这通常在 class 的 __init__ 中完成.然后,您在 create 函数中检查该值并使用它执行任何您需要的操作。

class main(QMainWindow):
    def __init__(self):
        super().__init__()
        <b>self.n = 1</b>

        self.newUi()
        # ...

    def create(self):
        if <b>self.n</b> == 1:
            self.radio1.show()
            self.n = 2

        elif self.n == 2:
            self.radio2.show()
            self.n = 3

        elif self.n == 3:
            self.radio3.show()
            <b>self.n = 4</b>

        else:
            print('done')