【问题标题】:Creating tabs for each name in a list为列表中的每个名称创建选项卡
【发布时间】:2023-03-29 12:08:01
【问题描述】:

我试图弄清楚如何实现我的代码,以允许我基于字符串列表创建一个选项卡,并输出每个选项卡以及该选项卡的正确对应参数/数据。

在我们继续之前,先了解一下这个程序的背景知识。该程序是一个文本/日志比较工具,我用来将设备的许多配置与默认/正确配置进行比较。如果比较时设备有任何参数不正确,它将输出不正确的参数让我/用户知道。

但是为了这部分代码,我们只是说我们正在比较一些动物。

这是我目前拥有的 GUI/程序的预览:

基本上,我的目标是将<Cat> <Dog> <Bird> <Tiger> 全部包含在他们自己的标签中,其中包含他们的数据。

我一直在使用的代码如下:

 with open(compareResults, 'wb') as fdout:
            while (count < (len(setNames))):
                for number, item in enumerate(lst, 0):
                    print setNames[count]
                    fdout.write('{}'.format(setNames[count]) + '\r\n')
                    for param, correct in correct_parameters.items():
                        if item.get(param) != correct:
                            print ('{} = {}'.format(param, item.get(param)))
                            fdout.write('{} = {}'.format(param, item.get(param)) + '\r\n')
                    count += 1

包含每个动物每个名称的列表是setNames[] 如果您想查看整个代码,请单击 pastebin 链接; http://pastebin.com/6v86qgj3

我的想法是,以某种方式使用setNames 创建一个循环,这将允许我为setNames 中的每个名称创建一个选项卡,然后将结果输出到每个相应的名称。但是,我对 PyQt 不是很好,我仍在试图弄清楚如何制作单个选项卡,以及是否可以创建它而无需首先为选项卡或类似性质的东西创建一个函数。任何帮助将不胜感激。

【问题讨论】:

    标签: python list user-interface tabs pyqt


    【解决方案1】:

    首先很抱歉,我这里只安装了 PySide,但它不应该有所作为。下面是一个小部件的示例,它具有由数组创建的选项卡:

    from PySide 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', 'Tiger']
            for tabName in setNames:
                # Each tab needs its own widget, so let's create one with a label
                tabWidget = QtGui.QWidget()
                tabLabel = QtGui.QLabel('Hello! I am a {0}.'.format(tabName) )
    
                # Set the tab widget's layout
                tabLayout = QtGui.QVBoxLayout()
                tabLayout.addWidget(tabLabel)
                tabWidget.setLayout(tabLayout)
    
                # Create the tab
                self.myTabs.addTab(tabWidget, tabName)
    
            # 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()
    
    win = Window()
    

    您可以看到它相当简单。如果您需要再次访问选项卡的小部件,可以使用 QTabWidget.currentWidget()QTabWidget.widget(&lt;index&gt;)

    【讨论】:

    • 嗨,您的代码在独立环境下运行良好,但在尝试将其实现到我自己的代码中时,我收到此错误 AttributeError: 'QWidget' object has no attribute 'addTab' 但我们走在正确的轨道上
    • 注意不要在QtGui.QWidget上运行addTab(),而是在QtGui.QTabWidget上运行
    • 好的,问题已解决。现在问题在于将代码放在循环中的哪个位置,以便我可以正确打印出结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2011-08-30
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多