Evgenij LegotskojMarch 15, 2017, 1:10 p.m.

PyQt5 - Lesson 006. Work with QTableWidget

Content

For initial acquaintance with QTableWidget in PyQt5 we will create a table with three columns and one row. When you hover over the table headings, a pop-up message will be displayed. The text in the headers will be aligned to the left edge of the first column, in the middle to the second and to the right of the third column. Also the size of the columns will be adjusted according to the content.

The table will look like this:

Implementation

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


class MainWindow(QMainWindow):
    # Override class constructor
    def __init__(self):
        # You must call the super class method
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(480, 80))         # Set sizes 
        self.setWindowTitle("Работа с QTableWidget")    # Set the window title
        central_widget = QWidget(self)              # Create a central widget
        self.setCentralWidget(central_widget)       # Install the central widget

        grid_layout = QGridLayout(self)         # Create QGridLayout
        central_widget.setLayout(grid_layout)   # Set this layout in central widget

        table = QTableWidget(self)  # Create a table
        table.setColumnCount(3)     #Set three columns
        table.setRowCount(1)        # and one row

        # Set the table headers
        table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"])

        #Set the tooltips to headings
        table.horizontalHeaderItem(0).setToolTip("Column 1 ")
        table.horizontalHeaderItem(1).setToolTip("Column 2 ")
        table.horizontalHeaderItem(2).setToolTip("Column 3 ")

        # Set the alignment to the headers
        table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
        table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
        table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight)

        # Fill the first line
        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"))

        # Do the resize of the columns by content
        table.resizeColumnsToContents()

        grid_layout.addWidget(table, 0, 0)   # Adding the table to the grid


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
- company blog
Support the author Donate
U

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

Через метод setIcon

table.horizontalHeaderItem(0).setIcon("qrc://path/to/icon.png")
ISh

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

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

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

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

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

table.setMinimumWidth(100)
ISh

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

b

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

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

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

b

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

Comments

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

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
VSh

C++ - Тест 003. Условия и циклы

  • Result:71points,
  • Rating points1
S
  • Sergej
  • Sept. 6, 2020, 1:50 a.m.

Qt - Test 001. Signals and slots

  • Result:100points,
  • Rating points10
S
  • Sergej
  • Sept. 6, 2020, 1:48 a.m.

Qt - Test 001. Signals and slots

  • Result:94points,
  • Rating points8
Last comments
VB

Qt/C++ - Lesson 004. QSqlTableModel – How to present the table from database?

Почему-то такой метод для обновления не работает, который можно было бы применить в данном примере. То есть в представлении данные удаляются и обновляются, а в базе данных изменений не происходи…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Кажется я понял в чем ошибка - я вручную создал таблицу Device в базе данных DataBase.db через DB Browser for SQLite в корне проекта с соответствующими типами данных и по какой-то причине insert…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Да, у меня тоже такая мысль возникла, но я просто скопипастил этот код из статьи, ничего в нем не меняя.

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Пока добавляли у себя код, что-то пробовали проверяли, могло дойти до ситуации, когда у вас получилась создана таблица, с количеством колонок, не совпадающим с количеством колонок в финальной ве…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Попробовал запустить код, описанный в данной статье, но получаю следующее: Подскажите в чем может быть проблема ? Вывод окна - пустой:
Now discuss on the forum
U

Как в qml работать с динамически созданными потомками?

Приветствую, уже полюбившийся форум) Есть у меня Item{id: _window}, в который я по нажатию кнопки создаю объекты: myComponent = Qt.createComponent(paletteItem.componentFile); myC…
U

Помогите сделать наследованый класс MenuElements от класса Menu

Я может что-то не совсем понял... Но наследовать элементы меню от самого меню - верное решение логически? Наследование нужно, чтобы в итоге получился класс, который будет иметь всё то же с…
KM

не знаю что писать в cpp

почти Actionn::Actionn(const QString& name, QWidget *parent) : //lista inicjalizacyjna MenuElement(name,parent), QWidget(parent), ui(new Ui::Actionn) вдруг кто то мучался к…

не могу передать стринг с QLineEdit

QLineEdit *myLineEdit = new QLineEdit("line edit name", this); QString str = myLineEdit->text();

QSqlTableModel не удаётся редактировать и удалять данные

Если через раз, то дело скорее всего в том, что обычно ID является автоинкрементируемым столбцом, который всегда растёт, даже если какие-то строки удалялись из базы данных. Если у вас было 4 зап…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB