2016-09-20 7 views
0

私はpyqtアプリケーションをメニューと中央ウィジェット(行と列がスプレッドシートのような表ウィジェット)で書いています。私は囲みウィンドウのサイズをウィジェットのサイズに設定したいと思います。私はそれをある程度の大きさに固定し、美的理由のために国境の周りを無駄にしたくありません。テーブルウィジェットの全体的な幅を抽出するにはどうすればよいですか?私はtabeleWidget.width()を使用しようとしましたが、それは私に見えるセルの幅を与えます。私はpyqt4とpython 2.7を使用しています。PyQt:ウィジェットサイズに合わせてウィンドウサイズを設定する方法は?

+0

レイアウトを使用していますか?テーブルウィジェットがウィンドウ内の唯一のウィジェットである場合、ウィンドウはテーブルと同じサイズでなければなりません。 –

答えて

1

テーブルのサイズを取得する簡単な方法があるかどうかはわかりませんが、このようなことはどうですか?

from PyQt4 import QtCore, QtGui 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, table_rows, table_cols, **kwargs): 
     super(MainWindow, self).__init__(**kwargs) 
     self.table = QtGui.QTableWidget(table_rows, table_cols) 
     self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
     self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
     self.table.verticalHeader().sectionResized.connect(self.fitToTable) 
     self.table.horizontalHeader().sectionResized.connect(self.fitToTable) 
     self.setCentralWidget(self.table) 
     self.fitToTable() 

    @QtCore.pyqtSlot() 
    def fitToTable(self): 
     x = self.table.verticalHeader().size().width() 
     for i in range(self.table.columnCount()): 
      x += self.table.columnWidth(i) 

     y = self.table.horizontalHeader().size().height() 
     for i in range(self.table.rowCount()): 
      y += self.table.rowHeight(i) 

     self.setFixedSize(x, y) 


if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    win = MainWindow(4, 5) 
    win.show() 
    app.exec_() 

この例では、テーブルのサイズを計算し、それらの値にウィンドウサイズを固定します。また、ユーザーが手作業で行や列のサイズを変更した場合に合わせてウィンドウのサイズを変更します。

+0

包括的な回答をありがとう。 – LostInTheFrequencyDomain

関連する問題