基于Tuple自动创建QStackedWidget页面

时间:2017-12-01 19:46:26

标签: python pyqt5 qt-signals qstackedwidget qt-slot

我对python很新,我觉得这是一个高级问题,考虑到它可能超出了Stack Exchange的范围。请耐心等待。

我有一个QTreeWidget和QStackedWidget。我使用元组填充了QTreeWidget

TreeList = ({

    'Header1': ((
        'Item11',
        'Item12',
    )),

    'Header2': ((
        'Item21',
        'Item22'
    ))
})

for key, value in TreeList.items():
    root = QTreeWidgetItem(self.QTreeWidget, [key])
    for val in value:
        root.addChild(QTreeWidgetItem([val]))

我想使用这个相同的元组来填充QStackedWidget,其页面与QTreeWidget对应,并在同一个循环中建立信号和插槽。我尝试过使用:

for key in TreeList['Item1']:
    page = QWidget()
    page.setObjectName(key)
    self.QStackedWidget.addWidget(page)
    print(self.QStackedWidget)

但是所有对象都指向相同的十六进制值,我认为这意味着它们不是唯一的。也许我需要增加索引?在任何一种情况下,我都无法弄清楚如何生成信号和插槽,因为它们是动态创建的,我需要唯一但可预测的名称。

这个想法是,通过简单地向元组添加新的类别或项目,QTreeView,QStackedWidget和signals / slots都是在运行时生成的,无需修改元组之外的任何源代码。

实现这一目标的最佳方法是什么?

很抱歉,如果这太多了,但我认为这可能是一个很好的问题,以防其他人在以后尝试同样的事情。

编辑:我正在使用Python 3.6和PyQt5

1 个答案:

答案 0 :(得分:1)

我们的想法是将QStackedWidget的索引与QTreeWidgetItem相关联,这样我们就可以使用setData()的{​​{1}}方法来保存索引,然后恢复使用QTreeWidgetItem方法:

data()