PyQt5:基于Python Dictionary

时间:2018-01-07 19:29:26

标签: python file dictionary layout pyqt

对不起,如果问题有点模糊! 我是新手使用PyQt(并且通常制作GUI),我正在制作一个脚本,用于检测计算机上安装的程序并检索程序名称及其可执行文件路径。到目前为止,我有一个字典,文件名为键,相应的文件路径为键值。

这是一个片段,虽然实际字典要长得多:

{'Nexus Mod Manager': 'C:\\Games\\Nexus Mod Manager\\NexusClient.exe',
'CCleaner': 'E:\\Program Files\\CCleaner\\CCleaner.exe'}

我的目标是创建一个GUI,其中包含字典中每个键值对的行。我还想在每一行中放置2个按钮(是和否),让用户选择文件路径是否正确。如果它是正确的,它将执行一些其他功能。

问题是字典没有一个设定长度。在我的计算机上,大约有53个密钥,但是对于另一台计算机或者将来我安装或卸载程序的数量可能会有很大差异。

我更喜欢PyQt,因为那是我最熟悉创建GUI的模块,但我也对其他方法持开放态度。

谢谢!

1 个答案:

答案 0 :(得分:0)

这可以使用Qt的模型/视图架构来实现。 Heres a link to a tutorial from Qt,它在c ++中,但它应该会有所帮助。

基本上你要做的是子类QAbstractTableModel,然后覆盖数据方法,根据你的数据结构(在本例中是一个字典)显示每列中需要的信息。

使用下面的第二个字典键列表,以便可以使用索引来填充哪一行。

    self.data_dict = {}
    self.row_display_list = [x for x in self.data_dict.keys()] # Assumes the dict is not empty

def data(self, index, role=QtCore.Qt.DisplayRole):
    if role == QtCore.Qt.DisplayRole:
        if index.column() == 0:
            return self.row_display_list[index.row()]
        elif index.column() == 1:
            return self.data_dict[self.row_display_list[index.row()]]

有几种不同的方法可以为不同的数据结构实现这一点。