У меня есть 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_())