【问题标题】:Python PyQT4 - Adding an unknown number of QComboBox widgets to QGridLayoutPython PyQT4 - 将未知数量的 QComboBox 小部件添加到 QGridLayout
【发布时间】:2010-12-11 11:38:14
【问题描述】:

我想从队列中检索人员姓名列表,并使用 addWidget() 函数为每个人放置一个带有姓名的复选框到 QGridLayout。我可以成功地将项目放在 QListView 中,但它们只是相互重叠而不是创建新行。有人对我如何解决这个问题有任何想法吗?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

如果有帮助的话,self.jobQueue.getPeopleOffQueue() 会返回类似 ['Bob', 'Sally', 'Jimmy'] 的东西。

【问题讨论】:

    标签: python pyqt qcombobox qlistview


    【解决方案1】:

    这一行:

    QtGui.QCheckBox('%s' % item, self.chk_People)
    

    不将复选框添加到列表视图中,它只是以列表视图为父级创建它,并且有很大的不同。

    使用列表视图最简单的方法是QListWidget 便利类。为此,将您的复选框创建为 QListWidgetItem 的实例,然后在列表小部件上使用 addItem 将它们真正添加到其中。

    您在将它们添加到网格布局时遇到问题吗?通常,如果您拥有的复选框数量很少,则网格布局可能会更好 - 这完全取决于您希望应用程序的外观。但是如果你可能有很多这样的对象,那么列表小部件/视图是最好的。

    【讨论】:

      【解决方案2】:

      我无法告诉您 PyQt 中的解决方案,但您需要遵循的结构如下。 QListView 可以做你需要的,你不需要创建单独的复选框。创建QAbstractItemModelQStandardItemModel 的子类(取决于您要进行多少编码)覆盖flags() 方法以在@987654330 中返回适当的标志包括 Qt::ItemIsUserCheckable @ 方法添加一个额外的列以包含复选框,并在您希望复选框出现的列的data 方法中返回选中状态Qt::CheckedQt::UncheckedQt::CheckStateRole

      这也可以使用QListWidget 来完成,您可以使用QListWidgetItem 添加数据而无需创建模型。在QListWidgetItem 上,您可以使用setFlags()setData(QVariant(bool, Qt::CheckStateRole),而无需对模型进行子类化

      【讨论】:

        猜你喜欢
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2012-06-12
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        相关资源
        最近更新 更多