【发布时间】:2017-08-13 21:20:59
【问题描述】:
我正在创建一个包含许多复选框的应用程序。每 4 个复选框位于 groupBox_n (n=36) 内,然后这些 groupBox 位于另一个 groupBox 内。
每个复选框都按照一定的规则命名,这对我来说非常方便。我想访问他们每个人,但我不想每次都输入他们的名字。所以我想在一个列表中重现他们的名字,这样我就可以遍历列表并根据他们的名字进行控制。
但是当我尝试连接一个调用列表中字符串的按钮时,我无法做到这一点。这里我用 QLineEdit 复制了一个例子。
有可能做这样的事情吗?
调用findChildren对我没有帮助,因为那时我不知道我的复选框在我的应用程序中的位置,或者那里的“谁是谁”。通过 ObjectName 调用也是不可能的,是吗?
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.gridLayout = QtGui.QGridLayout(Form)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.My_lineEdit = QtGui.QLineEdit(Form)
self.My_lineEdit.setObjectName(_fromUtf8("My_lineEdit"))
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
MyStrinng = 'My_lineEdit'
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.Mystring.clear)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
像这样,PyQt 不会将我的字符串识别为对象的名称。我还尝试用QCore.QString('My_lineEdit') 制作PyQt 字符串,但QString 不适用于我的版本(you can see here)
这样我可以重现我所有复选框的名称。
names = []
for x in range(0, 6):
for y in range(0, 6):
for z in range(1, 5):
Names = 's'+str(x)+str(y)+'0'+str(z)
names.append(Names)
print(names)
【问题讨论】:
-
你想为你的 objectName 获取每个复选框吗?
-
当我得到一个列表时,重要的是哪个框是哪个。我不知道我可以在搜索中指定名称。谢谢!你认为我能以某种方式将它与我创建的名字列表进行比较吗?类似
for name in Mylist: myList = parentWidget.findChild(QPushButton, "name") -
是的,如果可以的话,但最好解释一下自己。根据您的问题,您的名称中有一个模式,您可以为您想要的内容放置一个有效的示例。
-
示例:
another_list = [parentWidget.findChild(QPushButton, name) for name in Mylist] -
只需放必要的代码,重新翻译Ui,代码需要的一切都是不必要的。
标签: python pyqt pyqt4 qcheckbox