Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
PyQt5, элемент создание элементов табличного вида QTableWidget
Очень интересный элемент, важный сложный, это таблица QTableWidget. Будет ещё несколько статей, где объекты QTableWidget будут использованы.
Программа ниже представляет таблицу в окне (рисунок 2), основанную на файле Таблица.csv (см. рисунок 1). С помощью клавиатуры можно передвигаться между ячейками таблицы. При нажатии клавиши ПРОБЕЛ содержимое текущей ячейки появляется в поле редактирования (QLineEdit) ниже. Такой же эффект достигается при щелчке левой кнопкой мыши по ячейке таблицы. Также обрабатывается нажатие клавиши Enter: появляется сообщение: Нажата Ener.
Программа представлена тремя скриншотами. Также ниже дана ссылка на полный текст программы.
В конструкторе окна MyWidget, наследуемый от QWidget указываются его параметра, а также создаётся поле редактирования (QLineEdit) и таблица на основании класса Tb, который наследует от QTableWidget.
Класс Tb (QTableWidget) надо рассмотреть очень внимательно. Ну, во-первых в конструкторе читается файл Таблица.csv, строки которого помещаются в список lines. При это каждая строка должна ещё разбивать на поля, согласно запятым. И далее важное
self.setColumnCount(len(lines[0].split(',')))
self.setHorizontalHeaderLabels(lines[0].split(','))
Формирование заголовка таблица в окне. Далее начинается цикл, в котором происходит добавление строк таблицы:
for i in range(1, len(lines)):
Делает пропуск, если строка пустая. Так бывает, когда в файле в конце есть пустые строки.
Важная строка
self.setRowCount(self.rowCount() + 1)
по сути каждый раз в цикле добавляется одна пустая строка, которая потом заполняется:
for t in p:
Важный элемент программы
self.setItem(i - 1, j, Tbi(t))
Tbi() создаёт элемент, поле таблицы. Класс Tbi см. ниже, он наследует от QTableWidgetItem. Далее
QTableWidget.setEditTriggers(QTableWidget.NoEditTriggers)
запрет на редактирования таблицы с помощью клавиатуры.
Далее идёт обработка клавиатуры (keyPressEvent) и мыши (mousePressEvent). Здесь для нас практически всё знакомо. Сделаю только следующие замечания.
QTableWidget.keyPressEvent(self, e) - указываем, что дальнейшая обработка клавиатуры стандартная для таблицы.
QTableWidget.mousePressEvent(self, e) - стандартная обработка мыши для таблицы.
Класс Tbi наследует от QTableWidgetItem, который определяет элемент таблицы. Метод задаёт цветовое содержимое ячейки таблицы на основе случайной генерации трёх чисел (см. функцию getr())
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.