PythonでPyQt5を使用すると、さまざまな数のセルでQTableWidgetsのグリッドを作成しようとしています。テーブルのサイズを調整して、使用可能なウィンドウのサイズにうまく収まるようにします。ウィンドウのサイズを増やしながら、テーブルを正しく調整することができます。つまり、セルのサイズが同じで、QTableWidgetsが空きスペースに合わせてサイズを調整します。この調整は、QTableWidgetクラスのresizeEventを上書きし、QGridLayoutの行と列のストレッチを設定することによって行われます。これは下の図に示されています。QTableWidgetを最小限のスペースに調整する方法
しかし、そのサイズを小さく調整することができなくなるいくつかの点でQMainWindow小さく、QTableWidgetsをしながら。
それは小さなウィンドウを作るときのサイズが小さい取得する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に設定してこの問題を解決しようとしました。しかし、このプロパティを0に設定しても効果はなく、与えられた値は厳密に正でなければなりません。 – Temppu