0

当我单击创建按钮时,我正在尝试制作一个新的“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()
4

2 回答 2

1

您不是在创建 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')
于 2021-05-01T23:42:02.393 回答
0

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

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

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

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

为此,您必须在检查或更改它之前声明该属性,这通常在__init__类中完成。然后,您在函数中检查该值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')
于 2021-05-01T23:44:59.987 回答