Какой метод следует использовать для сохранения фиксированной ширины столбца в PYQT5? - PullRequest
0 голосов
/ 30 марта 2020

Я использую QtableWidget из PyQt5 для отображения данных из базы данных.

Проблема : только в начале (когда я запускаю программу) ширина столбцов выглядит идеально, но когда я нажимаю кнопку для загрузки данных, размер одного из столбцов автоматически изменяется в соответствии с размером вывода (сокращается).

Перед нажатием кнопки refre sh

и

После нажатия кнопки refre sh

столбец с именем «Имя» сжимается.

Вот код, который я сделал с помощью дизайнера Pyqt5:

self.tableWidget.setRowCount(0)

        for row_number,row_data in enumerate(cur):
            self.tableWidget.insertRow(row_number)
            for column_number,data in enumerate(row_data):
                self.tableWidget.setItem(row_number,column_number,QtWidgets.QTableWidgetItem(str(data)))
        self.tableWidget.resizeColumnToContents(1)
    except Exception as e:
        print(e)

def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(624, 470)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
    self.tableWidget.setGeometry(QtCore.QRect(0, 70, 623, 330))
    sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
    sizePolicy.setHorizontalStretch(0)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
    self.tableWidget.setSizePolicy(sizePolicy)
    self.tableWidget.setStyleSheet("")
    self.tableWidget.setObjectName("tableWidget")
    self.tableWidget.setColumnCount(6)
    self.tableWidget.setRowCount(0)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(0, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(1, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(2, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(3, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(4, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(5, item)
    self.tableWidget.horizontalHeader().setStretchLastSection(False)
    self.label = QtWidgets.QLabel(self.centralwidget)
    self.label.setGeometry(QtCore.QRect(0, 0, 624, 51))
    font = QtGui.QFont()
    font.setFamily("Sylfaen")
    font.setPointSize(18)
    font.setBold(False)
    font.setItalic(False)
    font.setWeight(9)
    self.label.setFont(font)

    self.label.setObjectName("label")
    self.refresh = QtWidgets.QPushButton(self.centralwidget)
    self.refresh.setGeometry(QtCore.QRect(246, 411, 131, 31))
    #button event
    self.refresh.clicked.connect(self.display)

    font = QtGui.QFont()
    font.setPointSize(11)
    self.refresh.setFont(font)

    self.refresh.setObjectName("refresh")
    MainWindow.setCentralWidget(self.centralwidget)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

Я попробовал QSizePolicy, но, похоже, не сработало.

...