【问题标题】:How to make QTableWidget adjust to minimal space如何使 QTableWidget 调整到最小空间
【发布时间】:2017-11-08 11:54:06
【问题描述】:

将 PyQt5 与 Python 结合使用,我正在尝试创建一个包含不同数量单元格的 QTableWidget 网格。我使桌子的尺寸可调,以便它们很好地适合窗口的可用尺寸。我能够在增加窗口大小的同时正确调整表格,也就是说,单元格保持相同的大小,并且 QTableWidgets 将它们的大小调整为可用空间。这种调整是通过覆盖 QTableWidget 类的 resizeEvent 并为 QGridLayout 设置行和列延伸来完成的。如下图所示。

然而,当 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)

【问题讨论】:

    标签: python pyqt resize pyqt5 qtablewidget


    【解决方案1】:

    表格的大小不会调整为小于其默认最小大小。所以只要选择一个更合适的值,像这样:

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

    【讨论】:

    • 成功了,非常感谢!事实上,我确实尝试通过将小部件的最小尺寸设置为 0 来解决此问题。但是,将此属性设置为 0 似乎没有效果,并且给定的值必须严格为正。跨度>
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 2018-12-11
    • 2021-06-14
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多