Evgenii Legotckoi
Evgenii Legotckoi15 березня 2017 р. 13:10

PyQt5 - Урок 006. Робота з QTableWidget

Для початкового знайомства з QTableWidget в PyQt5 створимо таблицю з трьома колонками і одним рядком. При наведенні миші на заголовки таблиці буде показуватися спливаюче повідомлення. Текст в заголовках буде вирівняний до лівого краю у першій колонки, посередині в другій і праворуч у третьої колонки. Також розмір колонок буде підігнаний по вмісту.

Виглядати таблиця буде наступним чином:


Реалізація

from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import QSize, Qt


# Наслідуючи від QMainWindow
class MainWindow(QMainWindow):
    # Перевизначити конструктор класу
    def __init__(self):
        # Обов'язково потрібно викликати метод суперкласу
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(480, 80))             # встановлюємо розміри
        self.setWindowTitle("Робота з QTableWidget")    # Встановлюємо заголовок вікна
        central_widget = QWidget(self)                  # Створюємо центральний віджет
        self.setCentralWidget(central_widget)           # Встановлюємо центральний віджет

        grid_layout = QGridLayout()             # створюємо QGridLayout
        central_widget.setLayout(grid_layout)   # Встановлюємо дане розміщення в центральний віджет

        table = QTableWidget(self)  # створюємо таблицю
        table.setColumnCount(3)     # Встановлюємо три колонки
        table.setRowCount(1)        # і один рядок в таблиці

        # Встановлюємо заголовки таблиці
        table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"])

        # Встановлюємо спливаючі підказки на заголовки
        table.horizontalHeaderItem(0).setToolTip("Column 1 ")
        table.horizontalHeaderItem(1).setToolTip("Column 2 ")
        table.horizontalHeaderItem(2).setToolTip("Column 3 ")

        # Встановлюємо вирівнювання на заголовки
        table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
        table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
        table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight)

        # заповнюємо перший рядок
        table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
        table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
        table.setItem(0, 2, QTableWidgetItem("Text in column 3"))

        # робимо ресайз колонок по вмісту
        table.resizeColumnsToContents()

        grid_layout.addWidget(table, 0, 0)   # Додаємо таблицю в сітку


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

U
  • 18 квітня 2019 р. 11:37

А как иконку в хедер задать?

Evgenii Legotckoi
  • 21 квітня 2019 р. 12:22

Через метод setIcon

table.horizontalHeaderItem(0).setIcon("qrc://path/to/icon.png")
ИШ
  • 05 липня 2019 р. 10:03

Добрый день,а есть ли возможнось задать размер самой таблицы?

Evgenii Legotckoi
  • 05 липня 2019 р. 10:11

Дорый день! Если вы имеете ввиду ширину и высоту самого виджета, где располагается таблица, то это обычно делается через методы:

  • setMinimumSize
  • setMaximumSize
  • setMinimumHeight
  • setMaximumHeight
  • setMinimumWidth
  • setMaximumWidth

Исходя из своего опыта могу сказать, что обычно вся вёрстка делается через Layout классы, поэтому обычно задают минимальные размеры. А таблица уже подстраивается внутри Layout.

А в данном конкретном коде нужно вызывать данные методы так

table.setMinimumWidth(100)

Спасибо большое!
Удалось ограничить размеры таблицы для своей задачи с помощью setMaximumHeight и setMaximumWidth.

b
  • 08 листопада 2019 р. 07:40

Приветствую. Подскажите пожалуйста пару моментов.
1. Как сделать столбец не редактируемый, а остальные ячейки остаются редактируемыми
2. Как оталвливать события двойного клика для редактирования ячейки и нажатия на Enter для завершения редактирования
3. Как отсортировать записи по поределенной колонке. То есть сначала загружаем таблицу, после загрузки - сортируем
Буду благодарен

Evgenii Legotckoi
  • 09 листопада 2019 р. 05:58

Добрый день.
По первым двум вопросам вы найдёте ответ в этой статье - PyQt5 - Урок 008. Работа с QTableWidget (Обновление урока 006)

Что касается последнего вопроса, то я вам советую использовать для такого функционала QTableView. QTableWidget является довольно ограниченным виджетом и подходит для табличного отображения именно виджетов с разной информацией. А для табличных данных лучше использовать можель данных и QTableView

b
  • 09 листопада 2019 р. 08:24

Спасибо Вам большое. Буду изучать.

r
  • 31 липня 2021 р. 14:04

Добрый день!
Подскажите можно ли добавлять значения/строки в таблицу в цикле или с задержкой в реальном времени, что-то типа

        table.setItem(1, 0, QTableWidgetItem("Text in column 1"))
        time.sleep(2)
        table.setItem(1, 1, QTableWidgetItem("Text in column 2"))
        time.sleep(2)
        table.setItem(1, 2, QTableWidgetItem("Text in column 3"))

Заренее спасибо

b
  • 01 серпня 2021 р. 01:54

можно конечно. Важно понимать пару вещей.
1. Если строка именно добавляется в таблицу, нужно предварительно ее добавить в qtablewidget, для этого есть метод insertrow или как-то так - это легко гуглится
2. Если вы будете добавлять sleep ну или просто добавлять строки в цикле - то основной поток будет блокироваться на время работы цикла. Избежать блокировки можно вынеся заполнение qtablewidget в отдельный, параллельный поток. Если процес заполнения инициализируется в разных местах программы - нужно этот класс, который будет заполнять - сделать синглтоном, в противном случае будете при вызове из разных мест программы получать ошибку доступа к памяти от чего приложение будет падать.

i
  • 11 листопада 2024 р. 13:55

buy priligy 60 mg 53 have been reported by Javanovic Santa et al

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
i
innorwall13 листопада 2024 р. 23:03
Як зробити гру за допомогою Qt - Урок 3. Взаємодія з іншими об'єктами what is priligy tablets What happens during the LASIK surgery process
i
innorwall13 листопада 2024 р. 20:09
Використання змінних оголошених в CMakeLists.txt всередині C++ файлів where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
i
innorwall11 листопада 2024 р. 22:12
Django - Урок 055. Як написати функціонал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
i
innorwall11 листопада 2024 р. 18:23
QML - Підручник 035. Використання перерахувань в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
i
innorwall11 листопада 2024 р. 15:50
Qt/C++ - Урок 052. Налаштування Qt Audio player в стилі AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Тепер обговоріть на форумі
i
innorwall14 листопада 2024 р. 00:39
добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
i
innorwall11 листопада 2024 р. 10:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов03 жовтня 2024 р. 04:05
Реализация навигации по разделам Спасибо Евгений!

Слідкуйте за нами в соціальних мережах