Python PyQt4对象不显示

Python PyQt4对象不显示,python,pyqt,tabwidget,Python,Pyqt,Tabwidget,我正在PyQt4中开发一个编辑配置文件的工具。它会在每次加载文件时更改GUI。编辑器GUI是一个QTabWidget,包含的选项卡数量与加载文件中的章节数量相同。在每个选项卡上,它都有与加载文件中的子部分相对应的QGroupBox,最后这些组包含与实际配置参数和值相对应的QLineEdits 所有这些都是从一本大词典中建立起来的,在一定程度上可以很好地发挥作用: 所有选项卡均正确显示 所有组在所有选项卡中都正确显示 但是行编辑仅显示在第一个选项卡的第一组中 LineEdit对象也是为其他组创

我正在PyQt4中开发一个编辑配置文件的工具。它会在每次加载文件时更改GUI。编辑器GUI是一个QTabWidget,包含的选项卡数量与加载文件中的章节数量相同。在每个选项卡上,它都有与加载文件中的子部分相对应的QGroupBox,最后这些组包含与实际配置参数和值相对应的QLineEdits

所有这些都是从一本大词典中建立起来的,在一定程度上可以很好地发挥作用:

  • 所有选项卡均正确显示
  • 所有组在所有选项卡中都正确显示
  • 但是行编辑仅显示在第一个选项卡的第一组中
LineEdit对象也是为其他组创建的,我打印了它们,它们都指向一个不同的内存位置-仍然没有显示

以下是代码的相应部分:

while self.tabWidget.widget(0):
    self.tabWidget.removeTab(0)
for i in data['tabList']:
    self.log("Adding tab: '%s'" % i, DEBUG)
    self.data['tabDict'][i]['scrollarea'] = QScrollArea()
    self.data['tabDict'][i]['vbox'] = QVBoxLayout()
    for j in self.data['tabDict'][i]['groupList']:
        self.log("Adding group: '%s'" % j, DEBUG)
        self.data['tabDict'][i]['groupDict'][j]['groupbox'] = QGroupBox(j)
        self.data['tabDict'][i]['groupDict'][j]['formlo'] = QFormLayout()
        print self.data['tabDict'][i]['groupDict'][j]['formlo']
        for k in self.data['tabDict'][i]['groupDict'][j]['fields']:
            self.log("Adding field: '%s'" % k['name'])
            k['lineedit']  = QLineEdit(k['value'])
            k['lineedit'].setToolTip('<b>Type:</b> %s<br><b>TSDB path:</b> %s<br><b>Line:</b> %d<br><b>Comment:</b> %s' % (k['type'],k['path'],k['row'], k['comment']))
            self.data['tabDict'][i]['groupDict'][j]['formlo'].addRow(k['name'], k['lineedit'])
        self.data['tabDict'][i]['groupDict'][j]['groupbox'].setLayout(self.data['tabDict'][i]['groupDict'][j]['formlo'])
        self.data['tabDict'][i]['vbox'].addWidget(self.data['tabDict'][i]['groupDict'][j]['groupbox'])
    self.data['tabDict'][i]['scrollarea'].setLayout(self.data['tabDict'][i]['vbox'])
    self.tabWidget.addTab(self.data['tabDict'][i]['scrollarea'], i)
while self.tabWidget.widget(0):
self.tabWidget.removeTab(0)
对于数据中的i['tabList']:
self.log(“添加选项卡:“%s]”%i,调试)
self.data['tabDict'][i]['scrollarea']=QScrollArea()
self.data['tabDict'][i]['vbox']=QVBoxLayout()
对于self.data['tabDict'][i]['groupList']中的j:
self.log(“添加组:'%s'%j,调试”)
self.data['tabDict'][i]['groupDict'][j]['groupbox']=QGroupBox(j)
self.data['tabDict'][i]['groupDict'][j]['formlo']=QFormLayout()
打印self.data['tabDict'][i]['groupDict'][j]['formlo']
对于self.data['tabDict'][i]['groupDict'][j]['fields']中的k:
self.log(“添加字段:'%s'%k['name']))
k['lineedit']=QLineEdit(k['value'])
k['lineedit'].setToolTip('类型:%s
TSDB路径:%s
行:%d
注释:%s'(k['Type'],k['path'],k['row'],k['Comment'])) self.data['tabDict'][i]['groupDict'][j]['formlo'].addRow(k['name'],k['lineedit'])) self.data['tabDict'][i]['groupDict'][j]['groupbox'].setLayout(self.data['tabDict'][i]['groupDict'][j]['formlo']] self.data['tabDict'][i]['vbox'].addWidget(self.data['tabDict'][i]['groupDict'][j]['groupbox'])) self.data['tabDict'][i]['scrollarea'].setLayout(self.data['tabDict'][i]['vbox'])) self.tabWidget.addTab(self.data['tabDict'][i]['scrollarea'],i)

我错过了什么

我在另一个频道得到了答案,多亏了freenode上的#pyqt上的家伙们。问题在于
QScrollArea
需要一个由
setWidget()
设置的
QWidget
,它应该包含
QVBoxLayout

以下是固定代码:

    while self.tabWidget.widget(0):
        self.tabWidget.removeTab(0)
    for i in data['tabList']:
        self.log("Adding tab: '%s'" % i, DEBUG)
        self.data['tabDict'][i]['scrollarea'] = QScrollArea()
        self.data['tabDict'][i]['scrollarea'].setWidgetResizable(True)
        self.data['tabDict'][i]['widget'] = QWidget()
        self.data['tabDict'][i]['vbox'] = QVBoxLayout()
        for j in self.data['tabDict'][i]['groupList']:
            self.log("Adding group: '%s'" % j, DEBUG)
            self.data['tabDict'][i]['groupDict'][j]['groupbox'] = QGroupBox(j)
            self.data['tabDict'][i]['groupDict'][j]['formlo'] = QFormLayout()
            print self.data['tabDict'][i]['groupDict'][j]['formlo']
            for k in self.data['tabDict'][i]['groupDict'][j]['fields']:
                self.log("Adding field: '%s'" % k['name'])
                k['lineedit']  = QLineEdit(k['value'])
                k['lineedit'].setToolTip('<b>Type:</b> %s<br><b>TSDB path:</b> %s<br><b>Line:</b> %d<br><b>Comment:</b> %s' % (k['type'],k['path'],k['row'], k['comment']))
                self.data['tabDict'][i]['groupDict'][j]['formlo'].addRow(k['name'], k['lineedit'])
            self.data['tabDict'][i]['groupDict'][j]['groupbox'].setLayout(self.data['tabDict'][i]['groupDict'][j]['formlo'])
            self.data['tabDict'][i]['vbox'].addWidget(self.data['tabDict'][i]['groupDict'][j]['groupbox'])
        self.data['tabDict'][i]['widget'].setLayout(self.data['tabDict'][i]['vbox'])
        self.data['tabDict'][i]['scrollarea'].setWidget(self.data['tabDict'][i]['widget'])
        self.tabWidget.addTab(self.data['tabDict'][i]['scrollarea'], i)
while self.tabWidget.widget(0):
self.tabWidget.removeTab(0)
对于数据中的i['tabList']:
self.log(“添加选项卡:“%s]”%i,调试)
self.data['tabDict'][i]['scrollarea']=QScrollArea()
self.data['tabDict'][i]['scrollarea'].setWidgetResizeable(True)
self.data['tabDict'][i]['widget']=QWidget()
self.data['tabDict'][i]['vbox']=QVBoxLayout()
对于self.data['tabDict'][i]['groupList']中的j:
self.log(“添加组:'%s'%j,调试”)
self.data['tabDict'][i]['groupDict'][j]['groupbox']=QGroupBox(j)
self.data['tabDict'][i]['groupDict'][j]['formlo']=QFormLayout()
打印self.data['tabDict'][i]['groupDict'][j]['formlo']
对于self.data['tabDict'][i]['groupDict'][j]['fields']中的k:
self.log(“添加字段:'%s'%k['name']))
k['lineedit']=QLineEdit(k['value'])
k['lineedit'].setToolTip('类型:%s
TSDB路径:%s
行:%d
注释:%s'(k['Type'],k['path'],k['row'],k['Comment'])) self.data['tabDict'][i]['groupDict'][j]['formlo'].addRow(k['name'],k['lineedit'])) self.data['tabDict'][i]['groupDict'][j]['groupbox'].setLayout(self.data['tabDict'][i]['groupDict'][j]['formlo']] self.data['tabDict'][i]['vbox'].addWidget(self.data['tabDict'][i]['groupDict'][j]['groupbox'])) self.data['tabDict'][i]['widget'].setLayout(self.data['tabDict'][i]['vbox']) self.data['tabDict'][i]['scrollarea'].setWidget(self.data['tabDict'][i]['widget'])) self.tabWidget.addTab(self.data['tabDict'][i]['scrollarea'],i)
尽管第一个代码的奇怪行为是由什么导致的,但这仍然是一个悬而未决的问题。:)