Найти - Пользователи
Полная версия: Ширина столбца tableWidget
Начало » GUI » Ширина столбца tableWidget
1
rizan59ru
Здравствуйте!
Имеется табличка.
Как сделать ширину по контенту, но не менее определенной ширины?
Поскольку контент может быть различным, то в результате ресайза (при узком контенте) столбец сужается и надпись в шапке не видна

pyQt4
terabayt
QT?
код, если можно, так легче будет.
rizan59ru
#!/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())
rizan59ru
Форма, если нужна
rizan59ru
Можно так: измеряю ширину, делаю ресайз, измеряю ширину. Если новая ширина меньше старой, то устанавливаю дефолтную ширину, а если больше -то по контенту.
Дурацкое решение
terabayt
все что я смог найти это
self.table.horizontalHeader().setMinimumSectionSize(50)
вставьте это где-то в функцию createTable

P.S. я почти не пишу на qt, я больше по gtk
rizan59ru
terabayt
вставьте это где-то в функцию createTable

P.S. я почти не пишу на qt, я больше по gtk
Спасибо! Это работает!
Попробую адаптировать подобное для каждого столбика в отдельности.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB