Pyqt I';我想做一个新的';Qradiobutton';当我点击创建按钮时

Pyqt I';我想做一个新的';Qradiobutton';当我点击创建按钮时,pyqt,pyqt5,qpushbutton,qradiobutton,Pyqt,Pyqt5,Qpushbutton,Qradiobutton,当我点击“创建”按钮时,我正试图创建一个新的“Qradiobutton”。。。但该按钮只创建一个Qradiobutton。有什么建议吗 我的代码: 导入系统 从PyQt5.QtWidgets导入( QApplication、QMainWindow、QWidget、QPushButton、QRadioButton ) 类主(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() self.newUi() self.setGeometry(4004005

当我点击“创建”按钮时,我正试图创建一个新的“Qradiobutton”。。。但该按钮只创建一个Qradiobutton。有什么建议吗

我的代码:

导入系统 从PyQt5.QtWidgets导入( QApplication、QMainWindow、QWidget、QPushButton、QRadioButton ) 类主(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() self.newUi() self.setGeometry(400400500500) 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(“第三个”,self) self.radio3.setGeometry(50、130、60、20) def newUi(self): self.btn=QPushButton('create',self) self.btn.clicked.connect(self.create) def创建(自我): n=1 如果n==1: self.radio1.show() n=2 elif n==2: self.radio2.show() n==3 elif n==3: self.radio3.show() 其他: 打印(‘完成’) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) e=主() app.exec()
您不是在创建一个QRadioButton,而是在使现有的radiobutton可见。在您的情况下,问题是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创建(自我):
self.n+=1
如果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()
其他:
打印(‘完成’)

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

然后,即使假设您没有执行上述操作,您在那里声明的内容也被称为局部变量:它是一个仅存在于
create
函数中的变量,一旦该函数返回,它就会从内存中完全删除

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

正确的解决方案是创建实例属性,该属性是作为实例成员的变量

为此,必须在检查或更改该属性之前声明该属性,这通常在类的
\uuuu init\uuuu
中完成。然后,在
create
函数中检查该值,并根据需要对其执行任何操作

class main(QMainWindow):
    def __init__(self):
        super().__init__()
        self.n = 1

        self.newUi()
        # ...

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

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

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

        else:
            print('done')
类主(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.n=1
self.newUi()
# ...
def创建(自我):
如果self.n==1:
self.radio1.show()
self.n=2
elif self.n==2:
self.radio2.show()
自我评价n=3
elif self.n==3:
self.radio3.show()
自我评价n=4
其他:
打印(‘完成’)

你让我开心