蟒蛇PyQT4-添加一个未知的数量QComboBox部件QGridLayout
题
我要检索名单的人的名字从一排队,对于每个人,将一个框有他们的名字一QGridLayout使用addWidget()function.我可以成功地方项目中的一个QListView,但他们只是写在上面每一个其他的而不是创建一个新行。没有任何人有任何想法怎么解决这个问题?
self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()
for item in items:
QtGui.QCheckBox('%s' % item, self.chk_People)
自我。jobQueue.getPeopleOffQueue()将返回的东西喜欢['Bob','莎莉','Jimmy']如果有帮助。
解决方案
此行:
QtGui.QCheckBox('%s' % item, self.chk_People)
不添加复选框列表视图,它只能与列表视图作为父创建它,并有一个很大的区别。
使用一个列表视图的最简单方法是方便QListWidget
类。为此,创建复选框为QListWidgetItem
的实例,然后使用addItem
在列表控件真正将它们添加到它。
你有把它们添加到网格布局的问题吗?通常情况下,如果你有复选框的量小的网格布局可能会更好 - 这一切都取决于你希望你的应用程序的样子。但是,如果你可能有很多这样的对象,则列表控件/视图是最好的。
其他提示
我不能告诉你的解决方案在PyQt但是结构需要遵循如下。该QListView可以做你需要什么,你不需要建立独立的选框。创建一个亚类的 QAbstractItemModel
或 QStandardItemModel
(取决于如何很多编码,你会想要做的)复盖 flags()
方法以返回适当的标志 包括 Qt::ItemIsUserCheckable
, 在 columncount()
方法中增加一个额外的列以包括框并在 data
方法列在那里你想要你的选择框出现返回的检查状态 Qt::Checked
, Qt::Unchecked
的 Qt::CheckStateRole
.
这也可以通过使用 QListWidget
在这里你可以用 QListWidgetItem
添加数据,并不需要创建一个模型。上 QListWidgetItem
你可以使用 setFlags()
和 setData(QVariant(bool, Qt::CheckStateRole)
没有亚类的模型