0

設定ファイルを編集するツールをPyQt4で開発しています。ファイルがロードされるたびにGUIを変更します。エディターGUIは、ロードされたファイルのチャプター数と同じ数のタブを含むQTabWidgetです。各タブには、ロードされたファイルのサブセクションに対応するQGroupBoxがあり、最後にグループは実際の構成パラメーターと値に対応するQLineEditsを保持します。

これはすべて、大きな辞書から構築されており、ある程度までは正常に機能します。

  • すべてのタブが正しく表示されます
  • すべてのグループがすべてのタブに正しく表示されます
  • ただし、 LineEditsは、最初のタブの最初のグループにのみ表示されます

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)

ここで何が欠けていますか?

4

1 に答える 1

0

freenode の #pyqt の人たちのおかげで、別のチャネルで回答を得ました。問題は、によってセットがQScrollArea必要であり、.QWidgetsetWidget()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)

最初のコードの奇妙な動作の原因は何だったのかは、まだ未解決の問題です。:)

于 2012-12-09T01:39:33.797 に答える