2017-06-07 15 views
1

PythonでPyQt5を使用すると、さまざまな数のセルでQTableWidgetsのグリッドを作成しようとしています。テーブルのサイズを調整して、使用可能なウィンドウのサイズにうまく収まるようにします。ウィンドウのサイズを増やしながら、テーブルを正しく調整することができます。つまり、セルのサイズが同じで、QTableWidgetsが空きスペースに合わせてサイズを調整します。この調整は、QTableWidgetクラスのresizeEventを上書きし、QGridLayoutの行と列のストレッチを設定することによって行われます。これは下の図に示されています。QTableWidgetを最小限のスペースに調整する方法

screenshot

しかし、そのサイズを小さく調整することができなくなるいくつかの点でQMainWindow小さく、QTableWidgetsをしながら。

screenshot

それは小さなウィンドウを作るときのサイズが小さい取得するQTableWidgetsを可能にすることは可能ですか?明らかに、細胞の値はこれを可能にする。

上記のテーブルグリッドを実装したコードを以下に示します。

import sys 
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout 
from PyQt5.QtWidgets import QTableWidget, QWidget 

class MyTable(QTableWidget): 
    def __init__(self, r, c): 
     super().__init__(r, c) 
     self.horizontalHeader().hide() 
     self.verticalHeader().hide()     
    def resizeEvent(self, event): 
     eh   = event.size().height() 
     ew   = event.size().width() 
     ehremain = eh 
     eqremain = ew 
     rh   = int(eh // self.rowCount()) 
     cw   = int(ew // self.columnCount()) 
     for i in range(self.rowCount()-1): 
      self.setRowHeight(i, rh) 
      ehremain -= rh 
     self.setRowHeight(self.rowCount()-1, ehremain) 
     for j in range(self.columnCount()-1): 
      self.setColumnWidth(j, cw) 
      eqremain -= cw 
     self.setColumnWidth(self.columnCount()-1, eqremain) 

class TableGrid(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.table1 = MyTable(1,1) 
     self.table2 = MyTable(1,3) 
     self.table3 = MyTable(3,1) 
     self.table4 = MyTable(3,3) 
     grid_layout = QGridLayout() 
     grid_layout.addWidget(self.table1, 0,0) 
     grid_layout.addWidget(self.table2, 0,1) 
     grid_layout.addWidget(self.table3, 1,0) 
     grid_layout.addWidget(self.table4, 1,1) 
     grid_layout.setRowStretch(0,1) 
     grid_layout.setRowStretch(1,3) 
     grid_layout.setColumnStretch(0,1) 
     grid_layout.setColumnStretch(1,3) 
     self.setLayout(grid_layout) 
     self.show() 

class Window(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.table_grid = TableGrid() 
     self.setCentralWidget(self.table_grid) 
     self.show() 

if __name__ =="__main__": 
    app  = QApplication.instance() # checks if QApplication already exists 
    if not app: # create QApplication if it doesnt exist 
     app = QApplication(sys.argv) 
    app.aboutToQuit.connect(app.deleteLater) 
    sheet = Window() 
    app.exec_() 
    #sys.exit(0) 

答えて

0

テーブルのサイズがデフォルトの最小サイズより小さくなりません。したがって、次のように、より適切な値を選択してください:

class MyTable(QTableWidget): 
    def __init__(self, r, c): 
     ... 
     self.setMinimumSize(40, 40) 
+1

これは、多くの感謝の仕事でした!実際には、ウィジェットの最小サイズを0に設定してこの問題を解決しようとしました。しかし、このプロパティを0に設定しても効果はなく、与えられた値は厳密に正でなければなりません。 – Temppu

関連する問題