我现在有python函数(如下所示),它可以从熊猫的dataframe (df)构建一个QTableWidget。我希望这个QTableWidget默认为显示所有单元格的大小。不幸的是,QSizePolicy.Maximum使用的默认大小提示切断了表中的一些行和列。QTableWidget似乎没有setSizeHint()方法。如何将大小提示设置为显示所有行和列的大小?
我试着寻找以前关于这方面的文章,但我找到的答案中没有一个是用Python和使用QTableWidget的。
import PyQt5.QWidgets as QWidgets
import PyQt5.QtCore as QtCore
import PyQt5.QtGui as QtGui
import pandas as pd
def build_table(self,df):
table = QWidgets.QTableWidget()
table.setColumnCount(len(df.columns))
table.setRowCount(len(df.index))
table.setHorizontalHeaderLabels(df.columns)
for row_num, row in enumerate(df.index):
for col_num, col in enumerate(df.columns):
item = QWidgets.QTableWidgetItem(str(df.loc[row,col]))
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
table.resizeColumnsToContents()
table.resizeRowsToContents()
table.verticalHeader().setVisible(False)
table.setSizePolicy(QWidgets.QSizePolicy.Maximum,QWidgets.QSizePolicy.Maximum)
发布于 2019-02-10 14:50:24
sizeAdjustPolicy : SizeAdjustPolicy
此属性保存描述当视区大小变化时滚动区域大小如何变化的策略。
试一试:
import sys
import pandas as pd
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyWin(QMainWindow):
def __init__(self, df):
super().__init__()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
layout = QGridLayout(centralWidget)
self.tableWidget = self.build_table(df)
self.tableWidget.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents) # <---
self.tableWidget.setAlternatingRowColors(True)
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
layout.addWidget(self.tableWidget)
layout.addWidget(QPushButton("Button"))
def build_table(self, df):
table = QTableWidget()
table.setColumnCount(len(df.columns))
table.setRowCount(len(df.index))
table.setHorizontalHeaderLabels(df.columns)
for row_num, row in enumerate(df.index):
for col_num, col in enumerate(df.columns):
item = QTableWidgetItem(str(df.loc[row,col]))
table.setItem(row_num, col_num, item) # +++
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
table.resizeColumnsToContents()
table.resizeRowsToContents()
table.verticalHeader().setVisible(False)
# self.table.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) # ---
return table # +++
df = pd.DataFrame(
{'a': ['1','2','3','4','Mary','Jim','John'], 'b': ['3','4','1','2',100, 200, 300], 'c': ['1','2','3','4','a','b','c'],
'd': ['1','2','3','4','Mary','Jim','John'], 'e': ['1','2','3','4',100, 200, 300], 'f': ['1','2','3','4','a','b','c'],
'g': ['1','2','3','4','Mary','Jim','John'], 'h': ['1','2','3','4',100, 200, 300], 'j': ['1','2','3','4','a','b','c'],
'k': ['1','2','3','4','Mary','Jim','John'], 'l': ['1','2','3','4',100, 200, 300], 'm': ['1','2','3','4','a','b','c'],
})
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWin(df)
w.show()
sys.exit(app.exec_())
https://stackoverflow.com/questions/54612127
复制相似问题