Делаем приложение на Python и PyQt5 / Урок #2
Вставка
- Опубліковано 11 вер 2024
- Привет друзья! Серия видео уроков: делаем приложение на Python и PyQt5. Это второй урок #2. В этом видео мы сделаем заглянем внутрь графического интерфейса, который генерируется с помощью Qt Designer - в файл с расширением ui и сгенерируем из него файл на Python, при запуске которого будет выводиться наш интерфейс на Python в PyCharm. Причем, сгенерированный файл на Python с графическим интерфейсом будет ООП, т.к. там появятся классы. Т.е. произойдет конвертация ui файла в Python файл. )))) Будем использовать модуль PyQt5.
✔ Телеграм - t.me/wiseplat 🚀
✔ Вступай в группу Вк - wiseplat1 🚀
✔ Подписывайся zen.yandex.ru/...
✔ Поддержи проект: wiseplat.org/d...
❗️ Конечно, будет продолжение, если будет много позитивов.
🔔 Нажимай колокольчик чтобы не пропустить!
#урокиpyqt5 #python #делаемприложение #урокиpython
- Уроки от #OlegShpagin 👨🏼💻
Ставь лайк, если тебе понравилось видео 👍
►► Подписывайся на канал!
Вот код из видео, для тех, кто в позитиве:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowModality(QtCore.Qt.NonModal)
MainWindow.resize(534, 364)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setEnabled(True)
font = QtGui.QFont()
font.setPointSize(36)
self.label.setFont(font)
self.label.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 3)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(20)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 2)
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
self.calendarWidget.setObjectName("calendarWidget")
self.gridLayout.addWidget(self.calendarWidget, 1, 2, 3, 1)
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setObjectName("plainTextEdit")
self.gridLayout.addWidget(self.plainTextEdit, 2, 0, 1, 2)
self.dateEdit = QtWidgets.QDateEdit(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(12)
self.dateEdit.setFont(font)
self.dateEdit.setObjectName("dateEdit")
self.gridLayout.addWidget(self.dateEdit, 3, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 3, 1, 1, 1)
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 4, 0, 1, 3)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(24)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 5, 0, 1, 3)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 534, 18))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Тест приложения на Python с модулем PyQt5"))
self.label.setText(_translate("MainWindow", "Трекер события !@#"))
self.label_2.setText(_translate("MainWindow", "Описание события:"))
self.pushButton.setText(_translate("MainWindow", "Следить"))
self.label_3.setText(_translate("MainWindow", "До наступления события осталось: ХХ дней )))"))
if _name_ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Если интересно продолжение, то пишите об этом под видео. ))) 👍😀
Сделал интерфейс в Qt Designer и столкнулся с проблемой масштабирования монитора. У меня несколько мониторов, и на большом в настройках Виндовс стоит масштаб и разметка 200%. Так вот на этом мониторе окно запускается в два раза меньше при сохранении размера шрифтов, а на меньшем мониторе (100% масштаб) все ок. Несколько дней рою в гугле как сделать окно программы с фиксированным размером и игнорирующем масштаб монитора. В общем надеюсь на вашу помощь. PS: в TKinter все было ок. Заранее благодарен.
Ваши курсы именно чего не хватало! Всё по делу и всё понятно объяснено. Спасибо!
Да. Отличный контент.
Только сейчас заметил ваши видео, очень понятно и подробно. Спасибо вам! ❤️
Красавчик. Всё чётко и без воды. Спасибо за урок 😎
Спасибо за уроки. Очень понятно и доходчиво.
Хороший, приятный человек и уроки хорошие
согласен
Все круто по полочкам разложили, молодец!!!!!!!!!!!
Молодец! редко кто так доносит, талант
Уау, огромная благодарность , однозначно лайк и подписка
Спасибо Вам!!! Очень крутой мини-курс
Спасибо большое!
Конечно интересно продолжение. Лучшие уроки. Все очень доступно и наглядно. Спасибо вам за труды. Очень хочется урок по созданию и управлению БД с помощью ColumnView или хотя бы TableView
Отличный урок!Мне все понятно, спасибо!
чуть не захлебнулся от колличества воды
Топ
Супер, а можно обновление запускать с функции впайчарме чтобы не лазить в папку каждый раз. По обьяснению это самое лучшее.
Спасибо. Очень подробно.👍
супер полезные и разносторонние уроки , спасибо!
Как всегда топ контент! Спасибо
Визуал Бейсик 6.0 пожалуй покруче был.. Создал окно накидал кнопок тут же привязал к ним события в один клик откомпилировал все. Никаких танцев с бубнами. Неужели на пайтоне так нельзя?
Спасибо огромное , правда смог только со второго раза правильно сделать батник , я там файл удалил перед тем , как указать , крч в неправильном порядке сделал немного и одна моя такая ошибка погубила весь мой проект , буду внимательнее следующий раз , но со второго раза сделал всё верно ! Спасибо огромное , вы меня ещё ни разу не подвели
Спасибо большое очень хорошо и понятно объясняете
непоявилось у меня файла pyuic5.exe
Можно просто зажать SHIFT и в контекстном меню появится пункт "открыть окно команд". И она сразу откроется в нужной папке. Правда без прав администратора.
Сейчас много первокурсников которые тяжело въезжают в это все. Предлагаю сделать рубрику где разбираете элементарные задачи. Новичков много и просмотров будет, думаю, больше.
Например, из текста взять каждое слово, поменять местами первую и последнею букву.
И ещё первый язык который изучают в университетах это С++..
как то странно наверное брать один из наиболее сложных языков в качестве первого языка, ибо большая часть студентов приходят вообще без опыта программирования
@@sullenface532 В универе так
@@sullenface532 где ты был раньше с такими умозаключениями??? Я с детсва русский учу, самый сложный язык! А оказывается надо было начать с английского...
А если нет venv library?
А если я пишу код в соблайм текст и я не знаю как найти окружения
Привет! Установи виртуальное окружение прямо в Python, который используешь в sublime - скорее всего это пайтон по умолчанию - используй pip ))) а лучше поставь себе PyCharm.
Изменение интерфейса в Designer будет приводить к перетиранию всей написанной логики в файле, что не очень удобно.
неужели, хоть кто-то об этом подумал.
господи, есть светлые мозги
Чтобы в Designer работало Form -> View code в папке чарма создаем папку bin и в неё копируем pyuic5.exe, переименовываем в uic.exe...Как вариант)
А если я делал в Visual Studio Code и у меня нету папки venv что делать?
Если после "cd путь" вы не оказались в папку то напишите d: (вместо d название вашего диска)
Откуда этот кусок кода взялся
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_GroupBox()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
У меня тоже не было. После того, как дописал, форма открылась.
Здравствуйте. Большое спасибо за прекрасный канал. Наверное, лучшее даже среди платных курсов. Хотел уточнить, у меня у одного только так получается, что делаешь дизайн на QtDisigner, а когда открываешь через PyCharm (обоими способами) все съезжает? Уменьшаются все кнопки, метки итд, подписи вообще обрываются на полуслове. Чтобы сделать что-то более-менее вменяемое, пришлось методом тыка - изменил размер, открыл в PyCharm, посмотрел, и так много-много раз, чтоб настроиться. По-любому есть какая-то фишка, чтоб размеры в QtDisigner не масштабировались, а делалось как видишь в дизайнере, так и смотрится в PyCharm. Спасибо.
А шо делать если я в блокноте пишу?
cannot find reference uic
Что делать?!Это проблема пайчарма или я что-то не докачал??
python3.8
И проблема AttributeError: 'QLineEdit' object has no attribute 'toinput1', когда пытаюсь вывести то что я ввёл при нажатии на pushButton
Ошибка "cannot find reference uic" возникает, когда модуль uic не может быть импортирован. Это может быть вызвано несколькими причинами:
1. Модуль uic не установлен (пропишите в терминале "pip install PyQt5"
2. Модуль uic был поврежден или удален. Чтобы проверить, что модуль uic не поврежден, вы можете попробовать переустановить его с помощью команды pip.
Чтобы решить проблему AttributeError: 'QLineEdit' object has no attribute 'toinput1', необходимо убедиться, что переменная toinput1 существует. Переменная toinput1 должна быть связана с виджетом QLineEdit, который вы хотите использовать.
Можно в начале программы на питоне перед импортом трекер.пу указать директиву через модуль os, которая автоматически генерирует пу файл перед его импортом. Никакой батник не нужен.
подробнее пожалуйста.
Да, можно подробнее пожалуйста
А если pyuic5.exe нет в Scripts?
возможно оно будет подписано как "pyuic5" без ".exe". Тип файла может быть не написанный в имени файла
На мой взгляд, - очень сложное изложение для начинающих.
К тому же, применяя "проводник" и командную строку.
Даже не то, что сложное, а совершенно бессмысленное. Когда "программисты" начинают мучаться с проводником Windows - это нечто... Ну, не хочешь ты ставить Total Commander - Бог с ним, но команда перехода в директорию выше - это ж как азбука.
для начинающих сложно, но это видео (например для меня) как добавления материала в копилку. Если знать основы pyqt5 (изучая другие видео), то это видео будет как усвоение материала и помощь заполучить код с помощью ui и QtDesigner
Эй! Это что такое? У меня файл create_py_file_from_ui.but на but не изменился!как мне его сделать?
Привет 😀 Расширение - bat
не but, а bat - это во-первых, а во-вторых не забудьте включить отображение зарегестрированных расширений в Windows.
Я уже понял
Можно ли сравнить Windows Forms с Qt Designer?
с помощью бат файла не конвертируется. Бат запускается без ошибок, но питоновский файл не формируется
Здравствуйте, возникла трудность на моменте с созданием bat-файла. Как в bat перейти на диск D?
Я все написал так как вы, но не выходит, скорее всего проблема в том, что у меня диск D. Вот код:
pyuic5.exe -x D:\strong calculator\design.ui -o D:\strong calculator\design.py
Если закинуть в папку Scripts файл ui, то при таком коде все хорошо работает, выходит проблема скорее именно в диске D
pyuic5.exe -x design.ui -o design.py
Сам решил, проблема была в том, что в указание пути нельзя допускать пробелов(в самой ошибке так и написано xD )
Потихоньку начинает голова закипать.
Первой видео, что я смотрел о Питоне, там говорилось, что этот язык - проще чем другие. Щас смотрю уже не первое видео, а ничего простого не вижу. Сам язык - очень похож на Бэйсик. Библиотек наделали как на Делфи. Интерфейс - больше заточен под конкретные задачи, чем универсальный. Работа с формами - вообще писец. Если бы я так на Делфи описывал все параметры формы, а потом через пень колоду вставлял в программу, я бы программировать никогда не начал. :(
В чем универсальность Питона, когда под каждую задачу нужны свои костыли?
Python - это простой язык для освоения, но он не является самым простым языком для использования. Для создания сложных приложений может потребоваться изучение дополнительных библиотек и фреймворков.
нет папки vevn
Олег, подскажи, пожалуйста, а как в приложении на PyQt5 создать вкладки и расположить их в нужном месте (например, слева)?
PyQt5 вкладок слева:
1. Создать объект QTabWidget.
2. Добавить виджеты содержимого вкладки в QTabWidget.
3. Создать макет QBoxLayout с ориентацией Qt.LeftToRight. (ну или справа)
4. Установить макет в качестве макета для объекта QTabWidget.
Вот и все!
@cute_smart_guy, спасибо большое! Уже год прошёл, я очень далеко продвинулся и на половину написал очень большое приложение с кучей вкладок. Для расположения вкладок слева нашёл написанный класс, который уже потом сам модернизировал
Однако, попробую и Ваш способ, может, он окажется лучше
@cute_smart_guy, спасибо большое! Уже год прошёл, я очень далеко продвинулся и на половину написал очень большое приложение с кучей вкладок. Для расположения вкладок слева нашёл написанный класс, который уже потом сам модернизировал
Однако, попробую и Ваш способ, может, он окажется лучше
@@user-xg4pd7en9d хорошо, желаю удачи!
А не будет проще конвертировать ui в py через терминал pycharm?с путями никаких проблем, в терминале сразу путь к папке venv проекта
Но хотелось бы очень увидеть про выравниваю виджетов, задавать отступы между и тд
А главное увидеть автосайз виджетов при изменит размера окна пользователем
Привет))) Да, правильно - можно и так - просто хотел показать универсальный подход - не завязываясь на возможностях PyCharm )))
@@wiseplat тогда ещё все делать без pycharm и designera, от руки в консоли или стандартном idle тогда точно будет универсально)))))
@@p1grishin ну ))) нужно знать меру )) и не все пользуются PyCharm, например пользуют Visual Studio и т.д.)))
@@p1grishin Почему всем так нравится получать файл через командную строку? В Qt designer - вкладка Форма, представление код Python-сохранить. Всё очень просто. В qt creator делается вообще автоматически.
Здравствуйте, хотела спросить, а если pyuic5.exe не отображается в Scripts, как можно или исправить это или конвектировать по другому?
Добрый день, а обязательно нкужно ui-файл конвертировать в пайтон-файл?
Пайтон файл нужен, что бы уже в коде менять функции, размер и так далее, если например есть недоработки и не хочешь переделывать в QtDesigner, то можно изменять недостатки в коде. Но это так же можно менять в QtDesigner и заново сохранить файл ui.
Что я зделал не так???? Если у меня нету папки venv (((
пробуйте переустановить pyqt5
Все отлично зашло, все получилось, но остался вопрос, если не создавалось виртуальное окружение и файлы проекта хранятся на диске D: ? Частично решил вопрос добавив в пичарм конвертер используя файл pyuic5.exe из директории скрипта Python 39. Файл создается, но не хочет запускаться, т.к. не вписываются вот эти строки . Вписываю вручную и все ок. Можно ли как-то решить эту проблему?
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Чтобы решить эту проблему, необходимо изменить файл .py так, чтобы он содержал полный путь к модулю QtWidgets. Вы можете сделать это вручную, добавив следующие строки в начало файла:
import sys
sys.path.append(r"D:\путь\до\папки\с\модулем\QtWidgets")
У меня в venv нету pyuic5.exe
Привет 😀 Выполнял pip install PyQt5?
@@wiseplat здравствуйте, у меня та же проблема, я это выполнял и вот результат: C:\Users\HP\Desktop\майн\датапаки>pip install PyQt5
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: PyQt5 in c:\users\hp\appdata
oaming\python\python39\site-packages (5.15.2)
Requirement already satisfied: PyQt5-sip=12.8 in c:\users\hp\appdata
oaming\python\python39\site-packages (from PyQt5) (12.8.1)
Я пятый
У меня не меняется файл trecker.py
Люди, ну что же с вами всеми. Там же есть Форма-Представление в коде Python-сохранить.
Error in input file: no element found: line 1, column 0 и че дальше-_-
Ошибка "Error in input file: no element found: line 1, column 0" означает, что парсер не смог найти ожидаемые элементы в обрабатываемом файле с самого начала. Это может происходить по нескольким причинам:
1. Пустой файл
2. Неправильный формат файла
3. Неверный путь к файлу
4. Некорректные права доступа к файлу
5. Поврежденный файл
Застрял на процессе с bat, я на маке. Пробовал несколько раз ничего не получилось.
На Mac изменить txt в .bat можно двумя способами:
1. Используя текстовый редактор
Откройте файл txt в текстовом редакторе, например, в TextEdit. Затем измените расширение файла с .txt на .bat.
2. Используя терминал
Откройте терминал и выполните следующую команду:
mv filename.txt filename.bat
где filename - это имя файла, который вы хотите изменить.
* Например, чтобы изменить файл с именем "example.txt" на файл с именем "example.bat", выполните следующую команду:
mv example.txt example.bat
* После того, как вы изменили расширение файла, он будет иметь формат .bat и его можно будет запускать в командной строке.
нетю у меня pyuic5=(
Я первый
Орёл!
обнови для убунту
™
А у меня нет venv!!!
Привет! Установи виртуальное окружение. Или посмотри - может у тебя папка с виртуальным окружением по другому называется.
блин да что же за извращенцы все это придумывали???
покажите им кто нибудь как это реализовано в рад студио
файла pyuic5.exe нет, что делать ?
у меня тоже нет, но это не важно. Оно и так работает, если в CMD или в батнике прописать путь к pyuic5.exe
Думаю это из-за разный версий (сборок) pyqt5