Проблема с шириной столбца PyQt5 - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть QTableView, заполняемый QAbstractTableModel через набор данных Pandas. Я могу установить режим изменения размера всех столбцов на «Растянуть» без проблем, но я хотел бы применить его к одному столбцу. Я попытался выполнить это, передав столбец, но форма больше не будет загружаться или отображаться при этом. Это действительно странно, потому что не выдается никакой ошибки, и даже когда я отлаживаюсь, я не могу получить какую-либо информацию об ошибке, она просто не загружается. Как только я изменяю его обратно или комментирую, он загружается и отображается нормально.

Также я использую VSCode IDE

Это не работает

self.state_table.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)

Это работает

self.state_table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

Полный код для главного окна

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.selected_states = ['WE', 'UMaint', 'SMaint']

        self.state_model = pmod.PandasModel()
        self.state_table = QtWidgets.QTableView()
        self.state_table.setModel(self.state_model)

        self.state_table.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)

        table_style = "::section {""  background-color: #422a88; color: white;}"
        self.state_table.horizontalHeader().setStyleSheet(table_style)
        self.state_table.setAlternatingRowColors(True)

        # header = self.state_table.horizontalHeader()
        # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
        # header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        # header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)

        self.my_pandas_manager = pmgr.PandasManager()
        self.my_pandas_manager.my_dataFrameChanged_signal.connect(self.state_model.setDataFrame)
        self.my_pandas_manager.start(self.selected_states)
        self.my_pandas_manager.stop()
        self.show()

        self.state_table.doubleClicked.connect(self.on_click)

        self.setWindowTitle('Wolfspeed CMMS Status Board')
        self.resize(1450, 1000)

        img_label = QtWidgets.QLabel()
        img_label.setAlignment(QtCore.Qt.AlignCenter)
        pixmap = QtGui.QPixmap('pictures\preview.png')
        pixmap = pixmap.scaled(600, 200, QtCore.Qt.KeepAspectRatio)
        img_label.setPixmap(pixmap)

        # Menu Bar Code
        menubar = self.menuBar()
        file_menu = menubar.addMenu('File')
        file_menu.addAction('Save')
        file_menu.addSeparator()
        file_menu.addAction('Quit', self.close)

        # Status Bar Code
        self.statusBar().showMessage('Hello', 3000)
        self.statusBar().showMessage('CMMS Status Table')

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(img_label)  # , 0, 0, 1, 1, QtCore.Qt.AlignCenter)
        layout.addWidget(self.state_table)  # , 1, 0, 1, 1)

        my_widget = QtWidgets.QWidget()

        my_widget.setLayout(layout)
        self.setCentralWidget(my_widget)

        state_toolbar = QtWidgets.QToolBar('State Selections')
        s_tbar.set_local_toolbar(self, state_toolbar)

        self.addToolBar(state_toolbar)

    def on_click(self, signal):
        row = signal.row()  # RETRIEVES ROW OF CELL THAT WAS DOUBLE CLICKED
        column = signal.column()  # RETRIEVES COLUMN OF CELL THAT WAS DOUBLE CLICKED
        cell_dict = self.state_model.itemData(signal)  # RETURNS DICT VALUE OF SIGNAL
        cell_value = cell_dict.get(0)  # RETRIEVE VALUE FROM DICT

        index = signal.sibling(row, 0)
        index_dict = self.state_model.itemData(index)
        index_value = index_dict.get(0)
        self.show_msg(cell_value)

    def show_msg(self, wo_equip_name):
        msg = QtWidgets.QMessageBox()
        msg.setWindowTitle('Active WorkOrders')
        msg.setText(wo_equip_name)
        x = msg.exec_()  # this will show our messagebox

    def tool_button_click(self, state):
        sender = self.sender().text()
        if state == True:
            self.selected_states.append(sender)
            self.my_pandas_manager.start(self.selected_states)
        else:
            self.selected_states.remove(sender)
            self.my_pandas_manager.start(self.selected_states)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.showMaximized()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...