0

これについて投稿された同様の質問をいくつか見ましたが、自分の状況に適用するほど頭がよくないのかもしれません。次の例では、setColumnWidth の影響を受けると思われる唯一の列は列 0 です。

''' A custom widget to set up the tree column widths '''

from PyQt4 import QtGui

class PCLTreeWidget(QtGui.QTreeWidget):
    def __init__(self,parent):
        QtGui.QTreeWidget.__init__(self,parent)

        ## set the sizes
        self.setColumnWidth(0,250)
        print self.columnWidth(0)
        self.setColumnWidth(1,250)
        print self.columnWidth(1)
        self.setColumnWidth(2,100)
        print self.columnWidth(2)
        self.setColumnWidth(3,1)
        print self.columnWidth(3)
        self.setColumnWidth(4,1)
        print self.columnWidth(4)
        self.setColumnWidth(5,3)
        print self.columnWidth(5)
        self.setColumnWidth(6,1)
        print self.columnWidth(6)
        self.setColumnWidth(7,1)
        print self.columnWidth(7)
        self.setColumnWidth(8,1)
        print self.columnWidth(8)
        self.setColumnWidth(9,1)
        print self.columnWidth(9)

出力: 250 0 0 0 0 0 0 0 0 0

私は何が欠けていますか?

更新:列はinit関数でまだセットアップされているため、resizeEvent関数でそれを行う必要があるようです:

''' A custom widget to set up the tree column widths '''
  2
  3 from PyQt4 import QtGui
  4
  5 class PCLTreeWidget(QtGui.QTreeWidget):
  6     def __init__(self,parent):
  7         QtGui.QTreeWidget.__init__(self,parent)
  8
  9
 10     def resizeEvent(self, resizeEvent):
 11         ## handle resize
 12         self.setColumnWidth(0,250)
 13         self.setColumnWidth(1,250)
 14         self.setColumnWidth(2,30)
 15         self.setColumnWidth(3,60)
 16         self.setColumnWidth(4,50)
 17         self.setColumnWidth(5,250)
 18         self.setColumnWidth(6,35)
 19         self.setColumnWidth(7,45)
 20         self.setColumnWidth(8,60)
 21         self.setColumnWidth(9,35)
 22         self.header().setResizeMode(0,QtGui.QHeaderView.Stretch | QtGui.QHeaderView.Interactive)
 23         self.header().setResizeMode(1,QtGui.QHeaderView.Stretch)
 24         self.header().setResizeMode(2,QtGui.QHeaderView.Fixed)
 25         self.header().setResizeMode(3,QtGui.QHeaderView.Fixed)
 26         self.header().setResizeMode(4,QtGui.QHeaderView.Fixed)
 27         self.header().setResizeMode(5,QtGui.QHeaderView.Stretch)
 28         self.header().setResizeMode(6,QtGui.QHeaderView.Fixed)
 29         self.header().setResizeMode(7,QtGui.QHeaderView.Fixed)
 30         self.header().setResizeMode(8,QtGui.QHeaderView.Fixed)
 31         self.header().setResizeMode(9,QtGui.QHeaderView.Fixed)
4

1 に答える 1

1

更新された例では、この一連の列調整は resizeEvent が発生するたびに実行されます。これは、ウィジェットが時間の経過とともにサイズ変更されるため、非常に頻繁に発生する可能性があります。これは本当にあなたが望むものですか?また、ユーザーが列のサイズを調整してからツリーの親のサイズを変更すると、すべてが再びこのサイズに戻されます。

代わりに列オプションを に移動してshowEvent、ウィジェットが表示されたときに 1 回だけ実行されるようにすることもできます。または、明示的なサイズを設定する代わりに、ヘッダーの最小サイズ設定をいじることができるかもしれません。http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qheaderview.html#setMinimumSectionSize。これにより、実際には最小サイズが強制される場合がありますが、サイズ変更で拡張することはできます。

于 2012-04-20T19:04:21.367 に答える