2016-12-06 46 views
2

私は周りを探索しましたが、私の問題の解決策を見つけることができません。QTableWidget pyqtに合わせて列幅を調整してください

私は2列のQTableWidgetを持っています。私がしようとしているのは、水平スクロールバーが表示されずにウィジェット全体に表示させることです。

enter image description here

私はUIとすべてのウィジェットや他のものを埋めるためにいくつかのコードを作成するためのQt Designerを使用している:それはすべて明確にする必要があり絵で

だから、最初に私はTH2にコンテンツへの2列をリサイズ:

self.statTable.resizeColumnToContents(0) 
self.statTable.resizeColumnToContents(1) 

、それは動作しますが、その後、ウィジェットは、2列幅にリサイズされていません。

+0

私は答えを出してくれましたか?私は彼らがあなたの問題を解決したかどうかを知ることに興味があります(それは非常に扱いにくいものでした。 – ekhumoro

+0

こんにちは、私は上記の2行の後にこの行を追加して解決しました: '' self.statTable.setFixedWidth(self.statTable.columnWidth(0)+ self.statTable.columnWidth() 1)) '' – matteo

答えて

6

これはPyQt5で非常に簡単な解決法を持っています。 UIを初期化するときにテーブル上でset the size adjust policyを実行するだけで、内容に合わせて自動的にサイズが変更されます。これは、どちらかのように、プログラム的にはQt Designerで行われ、またはすることができます。

self.statTable.resizeColumnsToContents() 

テーブルが再移入されたときに:

self.statTable.setSizeAdjustPolicy(
     QtWidgets.QAbstractScrollArea.AdjustToContents) 

あなたはその後、ちょうど行う必要があります。

PyQt4の場合、すべてを手作業で計算する必要があります。完全に一貫した結果を得るには、いくつかのハックも必要です。以下のデモスクリプトは問題なく動作しますが、YMMV:

import random 
from PyQt4 import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.table = QtGui.QTableWidget(5, 2, self) 
     self.button = QtGui.QPushButton('Populate', self) 
     self.button.clicked.connect(self.populate) 
     layout = QtGui.QGridLayout(self) 
     layout.addWidget(self.table, 0, 0) 
     layout.addWidget(self.button, 1, 0) 
     layout.setColumnStretch(1, 1) 

    def populate(self): 
     words = 'Red Green Blue Yellow Black White Purple'.split() 
     length = random.randint(2, len(words)) 
     self.table.setRowCount(random.randint(3, 30)) 
     for column in range(self.table.columnCount()): 
      for row in range(self.table.rowCount()): 
       item = QtGui.QTableWidgetItem(' '.join(
        random.sample(words, random.randint(1, length)))) 
       self.table.setItem(row, column, item) 

     self.table.setVisible(False) 
     self.table.verticalScrollBar().setValue(0) 
     self.table.resizeColumnsToContents() 
     self.table.setVisible(True) 
     self.setTableWidth() 

    def setTableWidth(self): 
     width = self.table.verticalHeader().width() 
     width += self.table.horizontalHeader().length() 
     if self.table.verticalScrollBar().isVisible(): 
      width += self.table.verticalScrollBar().width() 
     width += self.table.frameWidth() * 2 
     self.table.setFixedWidth(width) 

    def resizeEvent(self, event): 
     self.setTableWidth() 
     super(Window, self).resizeEvent(event) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(700, 150, 800, 400) 
    window.show() 
    sys.exit(app.exec_()) 
+0

私はpyQt5を使用していますので、どこでQTデザイナーで見つけることができますか?私はどこにもそれを見ないと、コードを入力してもうまくいきませんでした! @エフモロ –

+2

@モハメド・マイミネイール。これはプロパティエディタ( 'QAbstractScrollArea'セクション)にあります。 – ekhumoro

関連する問題