【问题标题】:PyQT adding data/information to Tabs using a LoopPyQT 使用循环将数据/信息添加到选项卡
【发布时间】:2015-09-16 14:30:04
【问题描述】:

我目前正试图弄清楚如何为我的程序更正执行几个循环,以便让它按我想要的方式运行。

该程序的背景很少,我有一个名称列表、一个字典列表和一个字典。目标是将字典列表与字典进行比较以获得正确的值。我的意思是假设我有一群动物(这是名称列表,我们称之为setNames),这些动物中的每一个(setNames)都有不同的房子、食物、水和床。 (这是字典列表,我们称之为setData)。最后,我们为这些字典中的每一个都提供了正确的值 (setData)。我们称之为correct_parameters

由于每只动物都有自己的字典,他必须确保自己的字典有正确的参数。

程序执行以下操作。

  1. 首先,它将“修复”我们的字典列表 (setData),以便我们稍后将其与我们的 correct_parameters 进行比较
  2. 然后,一旦我们的setData 被拆分/条带化,它将开始一个循环过程来遍历我们的setNames 列表中的每个动物。
  3. 最后,一旦完成循环,它将为每个单独的动物创建一个选项卡,其中包含我们在比较时不正确的参数。

视觉示例:

为了进一步解释图像,我们有 setNamessetDataCorrect_parameters 如我们所见,setDatacorrect_parameters 进行比较,以及任何不正确或不匹配的内容打印在标签上。

问题:

我的问题是为不正确数据中的每个参数创建了一个选项卡:

我对 python 还很陌生,我仍在试图弄清楚如何更正循环这个函数。有什么想法吗?

代码:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self, parent = None):
        super(Window, self).__init__(parent)

        # Create a QTabWidget where all the tabs will be held
        self.myTabs = QtGui.QTabWidget()


        # Loop through our animal names
        setNames = ['Cat', 'Dog', 'Bird']
        setData = [{'House=15': 'House=15', 'Food=2': 'Food=2', 'Water=4': 'Water=4', 'Bed=6': 'Bed=6'}, {'House=14': 'House=14', 'Food=2': 'Food=2', 'Water=5': 'Water=5', 'Bed=6': 'Bed=6'}, {'House=15': 'House=15', 'Food=8': 'Food=8', 'Water=4': 'Water=4', 'Bed=9': 'Bed=9'}]
        lst = setData
        for idx, val in enumerate(lst):
            o = {}
            for k,v in val.iteritems():
                if '=' in k:
                    k = k.split('=')[0]
                if '=' in v:
                    v = v.split('=')[1]
                    v = v.replace('"','')
                    v = v.strip()
                o[k] = v
            lst[idx] = o
        count = 0
        print lst
        correct_parameter = {'House': '15', 'Food': '12', 'Water': '4', 'Bed': '4'}
        while count < len(setNames):
            for number, item in enumerate(lst,0):
                for tabName in setNames:
                    for param, correct in correct_parameter.items():
                        tabLabel = QtGui.QTextEdit()
                        tabWidget = QtGui.QWidget()
                        self.myTabs.addTab(tabWidget, tabName)
                        if item.get(param) != correct:
                            tabLabel.append('{} = {}'.format(param, item.get(param)))
                            # Set the tab widget's layout
                            tabLayout = QtGui.QVBoxLayout()
                            tabLayout.addWidget(tabLabel)
                            tabWidget.setLayout(tabLayout)
                        QtGui.QApplication.processEvents()
                        count += 1


        # Set the main layout
        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.myTabs)
        self.setLayout(mainLayout)

        # Resize our window and show it
        self.resize(300, 300)
        self.show()


import sys
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = Window()
    QtGui.QApplication.processEvents()
    main_window.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python list loops dictionary tabs


    【解决方案1】:

    我对您为填充 tabWidget 所做的所有循环感到困惑。您遍历 setNames 两次(同时 count

    相反,我认为通过首先遍历选项卡然后检查字典是否有意义来更容易考虑问题。以下循环应替换整个 while 循环:

    for index, tabName in enumerate(setNames):
        tabWidget = QtGui.QWidget()
        tabLabel = QtGui.QTextEdit()
        nameData = lst[index]
        for k in nameData:
            if nameData[k] != correct_parameter[k]:
                tabLabel.append('{} = {}'.format(k, nameData[k]))
        tabLayout = QtGui.QVBoxLayout()
        tabLayout.addWidget(tabLabel)
        tabWidget.setLayout(tabLayout)
        self.myTabs.addTab(tabWidget, tabName)
    

    注意:您的代码列出了 ['Cat', 'Dog', 'Bird'] 并且所有图像都交换了 'Bird' 和 'Dog' 的顺序。

    【讨论】:

    • 是的,我的视觉示例中的代码列表是向后的,抱歉。我会试试的
    • 这很好用。谢谢我现在看到了我的循环问题。
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多