Здравствуйте!
Имеется табличка.
Как сделать ширину по контенту, но не менее определенной ширины?
Поскольку контент может быть различным, то в результате ресайза (при узком контенте) столбец сужается и надпись в шапке не видна
pyQt4
#!/usr/bin/env python3.4 #-*-coding:utf-8 -*- from PyQt4 import QtCore, QtGui, uic import sys import pickle class MainWindow(QtGui.QMainWindow): columnName = 'Фамилия Имя Курс'.split() #Подписи колонок таблицы dump = {} #Будущая структура данных rowCount = 5 rowHeight = 20 columnCount = 3 def __init__(self, parent=None): super(MainWindow, self).__init__(parent) #QtGui.QWidget.__init__(self,parent) uic.loadUi("form.ui", self) self.setFixedSize(600, 380) self.setWindowTitle('Список студентов') #Открытие окна примерно в середине экрана desktop = QtGui.QApplication.desktop() x = (desktop.width() - self.width()) // 2 y = (desktop.height() - self.height()) // 2 self.move(x, y) #Рисуем таблицу self.createTable(self.columnName, self.rowCount, self.columnCount, self.rowHeight) #Действие по клику кнопки "Записать" self.connect(self.btnAdd, QtCore.SIGNAL('clicked()'), self.click_btnAdd) #Действие по клику кнопки "Считать" self.connect(self.btnRead, QtCore.SIGNAL('clicked()'), self.click_btnRead) def createTable(self, columnName, rowCount, columnCount, rowHeight): '''создаем строки и столбцы в таблице columnName - подписи шапки таблицы rowCount - количество строк таблицы columnCount - количество столбцов таблицы rowHeight - высота строки''' #Режим растяжения таблицы по вертикали и горизонтали self.table.verticalHeader().setResizeMode(QtGui.QHeaderView.Fixed) self.table.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) #Режим выделения. Выделяем только строки. Выделяем только одну строку. self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) #Стилизуем шапку таблицы self.table.horizontalHeader().setStyleSheet("QHeaderView::section{font-weight:bold; color:#46647F; height:26px}"); #Запрет редактирования таблицы self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.table.setRowCount(rowCount) #Устанавливаем количество строк self.table.setColumnCount(columnCount) #Устанавливаем количество столбцов i = 0 #формируем подписи шапки: for name in columnName: item = QtGui.QTableWidgetItem() item.setText(name) self.table.setHorizontalHeaderItem(i,item) i+=1 #Устанавливаем высоту строк for i in range(0, rowCount): self.table.setRowHeight(i, rowHeight) self.table.setColumnWidth(2, 50) def click_btnAdd(self): self.dump = self.read_data_file() #Читаем исходный файл text = self.add_in_file(self.nameEdit.text(), self.nameEdit_2.text(), self.courseBox.currentText(), self.dump) #Запись в файл введенных данных self.change_table(text) ''' print(self.nameEdit.text()) print(self.nameEdit_2.text()) print(self.courseBox.currentText())''' #self.change_table(text) #print(text) #Очищаем поля ввода self.nameEdit.clear() self.nameEdit_2.clear() self.courseBox.setCurrentIndex(0) def click_btnRead(self): text = self.read_data_file() self.change_table(text) def add_in_file(self, name, name2, course, dump): entry = {} entry['name1'] = self.nameEdit.text() entry['name2'] = self.nameEdit_2.text() entry['course'] = self.courseBox.currentText() self.dump[len(dump)+1] = entry #print(self.dump) with open('database.db', 'wb') as f: pickle.dump(self.dump, f) return self.dump def read_data_file(self): '''Чтение из файла, если таковой не существует, создаем его''' try: with open('database.db', 'rb') as f: try: return pickle.load(f) except EOFError: return {} # no data in the file except FileNotFoundError: f = open('database.db', 'wb') #Если файл не существует. f.close() return {} # no data in the file def change_table(self,text): for i in text: if i >= self.rowCount: self.table.setRowCount(i) self.table.setRowHeight(i-1, self.rowHeight) item1 = QtGui.QTableWidgetItem() item1.setText(text[i]['name2']) self.table.setItem(i-1, 0, item1) #self.table.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents) item2 = QtGui.QTableWidgetItem() item2.setText(text[i]['name1']) self.table.setItem(i-1, 1, item2) self.table.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.ResizeToContents) item3 = QtGui.QTableWidgetItem() item3.setText(text[i]['course']) self.table.setItem(i-1, 2, item3) #self.table.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
self.table.horizontalHeader().setMinimumSectionSize(50)
terabaytСпасибо! Это работает!
вставьте это где-то в функцию createTable
P.S. я почти не пишу на qt, я больше по gtk