Как сделать таблицу в qt designer python

Добавил пользователь Валентин П.
Обновлено: 10.09.2024

Шаг 7.
Библиотека PyQt5. Знакомство с PyQt5. Создание окна с помощью программы Qt Designer. Загрузка ui-файла в программе

На этом шаге мы рассмотрим различные способы загрузки этого файла .

Как вы можете убедиться, внутри ui -файла содержится текст в XML -формате, а не программный код на языке Python . Следовательно, подключить файл с помощью инструкции import не получится. Чтобы использовать ui -файл внутри программы, следует воспользоваться модулем uic , который входит в состав библиотеки PyQt . Прежде чем использовать функции из этого модуля, необходимо подключить модуль с помощью инструкции:

Для загрузки ui -файла предназначена функция loadUi() . Формат функции:

Если второй параметр не указан, функция возвращает ссылку на объект формы. С помощью этой ссылки можно получить доступ к компонентам формы и, например, назначить обработчики сигналов. Имена компонентов задаются в программе Qt Designer в свойстве objectName .

Если во втором параметре указать ссылку на экземпляр класса, то все компоненты формы будут доступны через указатель self .

Загрузить ui-файл позволяет также функция loadUiType() - она возвращает кортеж из двух элементов: ссылки на класс формы и ссылки на базовый класс. Так как функция возвращает ссылку на класс, а не на экземпляр класса, мы можем создать множество экземпляров класса. После создания экземпляра класса формы необходимо вызвать метод setupUi() и передать ему указатель self .

Загрузить ui -файл можно и вне класса, после чего указать класс формы во втором параметре в списке наследования, - в этом случае наш класс унаследует все методы класса формы.

Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.

Что нам потребуется

Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.

В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.

После того как вы закончили с приготовлениями, откройте командную строку/терминал и убедитесь, что вы можете использовать команду pyuic5 . Вы должны увидеть следующее:

Если вы используете Windows, то, скорее всего, путь C:\Python36\Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH . Загляните в этот Дизайн

Основы

Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.

Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №1

После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольной простой.

Теперь давайте немного изменим размер нашего главного окна, т.к. нам не нужно, чтобы оно было таким большим. А ещё давайте уберём автоматически добавленное меню и строку состояния, поскольку в нашем приложении они не пригодятся.

Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №2

В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget , но он нам понадобится, поэтому с ним мы ничего не будем делать.

Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.

Макеты

Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.

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

Давайте создадим нашу первую форму без использования макетов. Перетащите список и кнопку в форме и измените их размер, чтобы вышло вот так:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №3

Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №4

Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.

Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay out -> Lay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №5

Ваши элементы должны быть в том же порядке, что и до внесённых изменений, но если это не так, то просто перетащите их на нужное место.

Так как мы использовали вертикальное размещение, все элементы, которые мы добавим, будут располагаться вертикально. Можно комбинировать размещения для получения желаемого результата. Например, горизонтальное размещение двух кнопок в вертикальном будет выглядеть так:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №6

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

Последние штрихи

Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.

В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.

Свойства элементов можно изменить в разделе Property Editor.

Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.

Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton . Вы можете сворачивать разделы в Property Editorнажатием по названию раздела.

Измените значение objectName на btnBrowse и text на Выберите папку.

Должно получиться так:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №7

Именем объекта списка является listWidget , что вполне подходит в данном случае.

Сохраните дизайн как design.ui в папке проекта.

Превращаем дизайн в код

Конечно, можно использовать .ui -файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui -файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.

Чтобы конвертировать .ui -файл в Python-файл с названием design.py , используйте следующую команду:

Пишем код

Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.

Создайте файл main.py в папке, где находится design.py .

Для Python GUI приложения понадобятся следующие модули:

Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:

Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp , который объединим с кодом дизайна для использования всех его функций:

В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main() :

И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:

В итоге main.py выглядит таким образом:

Если запустить этот код: $ python3 main.py , то наше приложение запустится!

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №8

Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.

Добавляем функциональность в наше Python GUI приложение

Примечание Весь дальнейший код пишется внутри класса ExampleApp .

Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:

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

  • self.btnBrowse : здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
  • clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
  • connect() — метод, который привязывает событие к вызову переданной функции;
  • self.browse_folder — просто функция (метод), которую мы описали в классе ExampleApp .

Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory :

Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None . Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory: .

Для отображения содержимого директории нам нужно импортировать os :

И получить список содержимого следующим образом:

Для добавления элементов в listWidget мы используем метод addItem() , а для удаления всех элементов у нас есть self.listWidget.clear() .

В итоге функция browse_folder должна выглядеть так:

Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:

Python GUI: создаём простое приложение с PyQt и Qt Designer, изображение №9

Так выглядит весь код нашего Python GUI приложения:

Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.

Напишите, пожалуйста, примеры использования QTableview: указание количества строк/столбцов, заголовки столбцов, заполнение значениями. Вроде надо с помощью QAbstractItemModel. Гуглится в основном про QTableWidget.


PyQt, редактируемый QTableView и автодобавление строк
Есть таблица, представляется классами myModel и myView. Не давно добавил возможность.


Из QT в PyQt
Здравствуйте, подскажите правильно ли у меня получился перевод из QT в PyQt? Интересует.

Перевести на PyQt
Здравствуйте, подскажите, как можно перевести на питон(PyQt) такие строки: *series0 <<.

Установка PyQt
Есть такой скрипт: from PyQt5.QtCore import* from PyQt5.QtGui import* import sys class.

Спасибо. Только все примеры на c++.

не появляется окошко? И пишет Process finished with exit code -1073740791 (0xC0000409). Если ее закомментить, окошко появляется. И exit code = 0. Модуль QtWidjets импортировала. Но он черный. А остальные импортированные модули подсвечены серым. Надо, видимо, передать в скобочках parent. Не знаю, какую переменную. Брала из книжки. Там пустые скобки. По смыслу туда надо передать экземпляр класса окна.

Посмотрите еще, пожалуйста. Пока не очень получается. И дебажить в pycharm не получается.

Беру пример из книжки и адаптирую под свою задачу. Концепцию "модель-представление" поняла более-менее. Заполняю данными модель NPTableModel. Почему-то когда запускаю, у таблицы только заголовки выводятся. Пыталась посмотреть значение объекта item1 в консоли. Это просто его адрес.

vic5710, круто у Вас получается, спасибо! Просто тут много непонятного мне кода. Хочу сама научиться. Я всё-таки не понимаю, почему мой исходный код не работал. И мне нужно, чтобы таблица заполнялась значениями из numpy массива. Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.

я в Qt пишу со времен Qt3, так что лишних движений не делаю :senor:
в питоне у меня внучка пишет
мне проще показать как надо чем объяснить как не надо


таблица - отображений модели данных. то есть данные -> преобразование данных (по дефолту все в текст)-> модель -> вьюха
извлечение данных - модель -> преобразование данных (по дефолту все текст) -> данные
вам надо работать с данными, а в модель тока заносить, ну еще можно во вьюхе редактировать
типа так

Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.

Ускоренное создание графичеких приложений в Python. Часть 1

Чтобы создать графический интерфейс ваших окон в PyQt, вы можете выбрать два основных пути: можно использовать Qt Designer или вручную написать графический интерфейс в простом коде Python. Первый путь может значительно повысить вашу продуктивность, тогда как второй путь дает вам полный контроль над кодом вашего приложения.

Приложения с графическим интерфейсом часто состоят из главного окна и нескольких диалогов. Если вы хотите создавать эти графические компоненты эффективным и удобным способом, Qt Designer - это инструмент для вас. В сегодняшней статье мы, рассмотрим основные способы установки Qt Designer.

Начало работы с Qt Designer

Qt Designer - это инструмент Qt, который предоставляет вам пользовательский интерфейс что видишь, то и получаешь (WYSIWYG) для продуктивного и эффективного создания графических интерфейсов пользователя для ваших приложений PyQt. С помощью этого инструмента вы создаете графический интерфейс, перетаскивая объекты QWidget в пустую форму. После этого вы можете упорядочить их в единый графический интерфейс, используя разные менеджеры компоновки.

Qt Designer также позволяет вам предварительно просматривать ваши графические интерфейсы с использованием различных стилей и разрешений, подключать сигналы и слоты, создавать меню и панели инструментов и многое другое.

Qt Designer не зависит от платформы и языка программирования. Он не создает код на каком-либо конкретном языке программирования, но создает файлы .ui. Эти файлы представляют собой файлы XML с подробным описанием того, как создавать графические интерфейсы на основе Qt.

Установка и запуск Qt Designer

Если имеется установленный пакет Anaconda, просто откройте его терминал Anaconda Prompt и введите команду designer.

Если же нет, то следует запустить следующие команды из терминала или командной строки:


>>> python3 -m venv ./venv
>>> source venv/bin/activate

(venv) C:/Desktop >>> pip install pyqt5 pyqt5-tools

Здесь вы создаете виртуальную среду Python, активируете ее и устанавливаете pyqt5 и pyqt5-tools88. pyqt5 устанавливает PyQt и копию необходимых библиотек Qt, а pyqt5-tools устанавливает набор инструментов Qt, который включает Qt Designer.

При установке исполняемый файл Qt Designer будет помещен в другой каталог в соответствии с вашей платформой:

При успешной установке на экране должны появиться два следующих окна:

Окно Qt Designer.

Окно на переднем плане - это диалог новой формы Qt Designer. Окно на заднем плане - это главное окно Qt Designer.


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Читайте также: