如何解决当我点击创建按钮时,我正在尝试创建一个新的“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 举报,一经查实,本站将立刻删除。