我正在编写一个包含菜单和中央窗口小部件的pyqt应用程序(一个表格小部件,其行和列看起来像一张电子表格)。我想将封闭窗口的大小设置为小部件的大小。出于美观原因,我不想将其修复到一定的尺寸和边界周围的浪费空间。如何提取表格小部件的整体宽度?我尝试使用tabeleWidget.width(),但它给了我看起来像一个单元格的宽度。我正在使用pyqt4和python 2.7。
答案 0 :(得分:2)
我不确定是否有一种简单的方法可以获得表格的大小,但是这样的话怎么样?
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_()
此示例计算表的大小,并将窗口大小固定为这些值。如果用户手动调整任何行或列的大小,它还会调整窗口大小以适应。