Как установить подсказку о размере для QTableWidget в Python - PullRequest
0 голосов
/ 10 февраля 2019

В настоящее время у меня есть функция python (ниже) для создания QTableWidget из кадра данных pandas (df).Я хотел бы, чтобы этот 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)  

1 Ответ

0 голосов
/ 10 февраля 2019

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_())    

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...