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

如何解决当我点击创建按钮时,我正在尝试创建一个新的“Qradiobutton”

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

        self.radio3 = qradiobutton('third',self)
        self.radio3.setGeometry(50,130,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 函数中的变量,并在该函数返回后立即从内存中完全删除。

解决方案是使该变量持久化,确保它不会被删除并“尽可能长时间”保持活动状态。
解决此问题的常见尝试是使用全局 变量(函数开头的语句 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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?