Изучение PyQT (Python GUI) / Урок #2 - Библиотека PyQT5. Надписи и кнопки
HTML-код
- Опубликовано: 9 июн 2024
- Создание проектов на PyQt 5 разделяется на две составляющие: создание дизайна в Qt Designer и написание кода на Python. За урок мы научимся прописывать код самостоятельно с использованием PyQt 5.
✅ Полезные ссылки:
1) Урок по PyQt на сайте: itproger.com/course/python-py...
⏰ Тайм-коды:
00:00 - Начало
00:21 - Импорт всех классов
01:55 - Основная функция. Создание окна
05:40 - Запуск программы
07:23 - Добавление надписи
10:50 - Добавление кнопки
12:10 - Обработка нажатия на кнопку
14:00 - Создание отдельного класса
19:15 - Функция при нажатии на кнопку
20:48 - Тестирование и завершение
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Группа FaceBook - goo.gl/XW0aaP
Инстаграм itProger: / itproger_official
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #goshaLessons
Отличный урок! мало того, что в тему ввёл, так ещё и чётко показал что такое class и def, как они взаимосвязаны
Абалдеть, лупил по клаве как секретарь.Понял что плохо очень понимаю классы. Спасибо
Круглые скобки таки нужны :-) И даже очень не безполезны, даже если нет аргументов. Они как бэ намекают, что тут вызывается метод (в данном случае конструктор класса). А без скобок выглядит как обращение к свойству или получение ссылки на метод или функцию.
Неужели ты исправился! Начал подробно объяснять! Аж приятно слушать стало. Громкость уменьшил, вырезал неимоверный поток лишних слов и снизил скорость речи. На конец-то!
Я не хейтер, но человек постоянно функцию методом называет, что в свою очередь вводит в заблуждение многих новичков. + элементарные ошибки, забыл поставить () после создания объекта класса , что свидетельствует о плохом знании ООП
@@user-yo1gf7ks1gновички не идут изучать gui, а лучше изучают питон чтобы легче было изучать библиотеки
self - это не ссылка на класс, это ссылка на экземпляр класса, который мы передаем при создании в конструктор чтобы присвоить ему атрибуты.
Отличное видео!
Спасибо за труды.
Спасибо большое, жду продолжений 🤤
Да наконец-то годный контент, однозначно подписка
Спасибо! Отличная подача материала! Оптимальная скорость для меня. Редкий случай, когда не хочется переключить скорость воспроизведения на 1,25/1,5.
ГОДНЕЙШАЯ ГОДНОТА !!!!!!!!!!!!! Спасибо !
Гоша!!!!!!!!! Если бы не ты, что бы я делал! Ну уж точно не понял бы, зачем при создании GUI-интерфейса используют self.
Спасибо, братан!
насчет скобок после QMainWindow - если мы их не ставим, мы просто передаем ссылку на класс. а нам нужно создать экземпляр класса, который создается только если поставить скобки
Спасибо за видео!!!
Создать главное окно одним способом, а потом изменить и сделать его вызов через класс - это очень помогло разобраться и понять, что же такое класс, конструктор, наследование и как всем этим пользоваться! Спасибо большое! Подписалась))
Жду ещё!
Вау PyQt5 круто спасибо
Спасибо. Очень понятно объясняешь
Пишу для тех, у кого не запускается тестовое окно This application failed to start because no qt platform plugin could be initialized. Reinstalling the application may fix this problem
Проблема в длинном пути до python.exe вашего проекта, я перенес всю директорию в C:\[проекты]\[проект]
все заработало.
Благодарю это прекрасно.....
Будем следить! Интересно. Несмотря на замечания в комментах, такого контента нет на ютубе
Так держать!!!
Nice Lessons
Супер!!!
Подскажите, кто знает....программа "Microsoft To Do" такой приятный и локаничный дизайн... Реально ли писать подобные приложения под Винду с таким дизайном на Python??? И какой фреймворк для GUI лучше использовать? Спасибо!
Спасибо. Маленькими шажочка, в светлый мир кодинга!
Ты прав. Вот я хочу верстать сайты, но не приступаю сразу, сначала делаю программы с GUI :D
Аватарка интересная у тебя
Обучаю Python! Посмотрите видосы. Буду рад :)
@@user-wd2yi3ls9x Всемирный символ людей с дцп
Ахах, признаки быдла - начало ответа с оскорбления и отсутствие грамотности при написании комента. Я видел эти символы не только с телевизора, в отличие от тебя, и знаю сколько боли они принесли)
3:06 - без скобок - это объявление функции без ее запуска/отработки. Скобки там нужны
Бесконечные библиотеки Python.... мммм... обожаю.
как будто в js их меньше.
@@user-qs8vf5dm3c Не поверишь, но по настоящему функциональных библиотек в JS можно по пальцам пересчитать.
@@vuitlik5449 тем временем с++...
@@vuitlik5449 Что это за библиотеки?
Обучаю Python! Посмотрите видосы. Буду рад :)
Гоша, подскажите пожалуйста в чем необходимость в выражении "self.main_text = QtWidgets.QLabel(self) " указывать первый "self"?
Мы же передаем "self" в качестве параметра: "QLabel(self)".
Таким образом "main_text = QtWidgets.QLabel(self)" все так же прекрасно работает... как и в случае "btn = QtWidgets.QPushButton(self)".
Или есть какие-то подводные камни?
Спасибо.
Может для начала стоит изучить разницу между вызовом функций/созданием экземпляров и получением типа (это относится к моменту с QMainWindow)?
Что-то боязно смотреть, если автор называет это "Непонятной причиной"
Ну и прям в самом начале - импорт модуля целиком, а потом ещё раз импорт из импортированного модуля :)
Комментарий в подержку канала
13.06
1)почему connect не вводится IDE автоматически ?
2) как это исправить?
у меня он вообще ругается что нет такого члена класса
Для тех, кто как и я не хочет влезать в эти self, классы и объекты, а просто что-то делает для себя:
Пишем наше майн виндоу вне функции аппликэйшн - прямо в основном коде. На том же отступе где импорт и прочее. Так же удаляем строчку иф нэйм == мэйн.
Функцию добавить лэйбл пишем после импорта. И все работает. вот как я написал эту функцию:
def add_label():
label_2 = QtWidgets.QLabel(window)
label_2.setText('New label')
label_2.move(60,90)
label_2.adjustSize()
label_2.show()
У вас есть плейлист по питону с нуля ?
что делать если у меня не открывается окто при открытии файла?
такая же херня...
Нужно приучить себя к тому, что если вы задаете вопрос, то необходимо максимально точно описать проблему, рассказать какие ошибки вылезают, очень хорошо будет, если вы скинете свой код сюда. Тогда вам ответят, помогут, найдут ошибку, а если задавать вопрос, по типу: " почему у меня не работает», то никто вам ничем не поможет.
Ура!
6:12 у меня не появилось что-то подобное, а если запускать через консоль, то выдает ошибку. Может кто знает как решить данную проблему?(работал на сублайме)
Такая же проблема
это будет появляться только в той проге. Я запускаю через консоль.
И у меня не запускается. На другом гайде все норм...
Обучаю Python! Посмотрите видосы. Буду рад :)
Гоша,объясни пожалуйста,эту программу можно будет запустить на андроид и айос? Под любые диагонали?
Нет
Хотя бы на descktop.
Короче каждую букву переписывал весь ролик с паузами, вспотел, поел....а результате то-же "просто белый квадратик, что вначале получился"))) Что-то мне подсказвает что от талант у меня просыпается))
Аналогично. Что то с кодом не так. Разобрался?)
У меня вышла ошибка This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Подскажите что делать)
РЕШЕНИЕ: Найти папку где установлен python, перейти по пути C:\Users\Андрей\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt\plugins найти тут папку platforms и перенести в папку где находится python
@@jonahhill7742 спасибо, я попробую
@@jonahhill7742 класс, получилось, еще раз спасибо
@@jonahhill7742 python.exe?
@@jonahhill7742 не могу найти папку C:\Users\Андрей(( Ладно шучу, спасибо, час убил все форумы перерыл но ты решил проблему!
Помоги пж вышла ошибка no Qt platform plugin could be initialized. Reinstalling the application may fix this problem я хз что делать
Та же история, решили как-нибудь?
@@rakadom_8815 не, тогда бросил QT, перешёл на kivy, там конечно не так красочно, но работает
@@rakadom_8815 до сих пор хз в чем была проблема
Всё хорошо. Но события я б сразу же называл Event и говорил о них как о событиях, что бы начинающий встречая потом это слово в других языках понимал о чём идёт речь. Вы говорите как о действиях
Подскажите, пожалуйста, сделал все как в видео, установил все что нужно, прописал точно такой же код, но при запуске открылось не окно, а объявление об ошибке:
This application failed to start because no qt platform plugin could be initialized. Reinstalling the application may fix this problem
Что можно с этим сделать?
решил проблему?
Перевести сначало надо) Там же написано, переустановить надо application
сам мучился, но решение нашел все просто
C:\Users\Пользователь\AppData\Local\Programs\Python\Python310\Lib\site-packages\PyQt5\Qt5\plugins\platforms(копируешь папку platforms) и вставляешь ее в папку с питоном(где сам экзешник)
Обучаю Python! Посмотрите видосы. Буду рад :)
@@user-if7tq1kr4d Спасибо!!
Привет поможіть. В юніті вкладці гейм все в пікселях як це виправити
Автору спасибо за уроки, хорошая практика, интересные идеи. Только позволь поправить ...
Там, где ты говоришь про "self" как объект, относящийся к классу, скажем так ... не совсем верно.
self здесь это объект экземпляра класса, коих в одном приложении может быть много.
Код работает без ошибок, библиотека pyqt5 установлена, но объект не запускается. Почему?
Купил Mac mini на М1 и жалею. Не устанавливается PyQt5. Установка останавливается при подготовке метаданных. Помогите.
всем привет) кто то знает что не так? возникает после самой последней редакции кода
AttributeError: 'bool' object has no attribute 'new_text'
Погугли или иди на форумы, сдесь на ютабчике без кода никто не поймет в чем ошибка, да и я и остальные тут все такие же новички как ты
Здравствуйте, не получается импортировать Qtwidgets 😔
Да потому что он не объяснил, что виджеты пукт5 нужно использовать вместе в одной директории, иначе откуда их импортировать?
@k 53 Нужно ли прописывать путь к проекту, к которому надо применить библиотеку?
@@user-fy2uo7cv3i не надо. pip все делает сам. Смотрит path и скачивает все в нужное место.
@k 53 все установилось корректно судя по логам терминала, но все равно выходит ошибка: нет модуля по имени “PyQt5”
Обучаю Python! Посмотрите видосы. Буду рад :)
Как зделать что бы при нажатии на кнопку закрывалась прога?
Прошу, умалаяю заметь. Сделай гайд как запустить сайт на django на vps сервере. На ютубе очень мало материала и тот устарел. Я думаю многим будет интересно.
На канале Джанго Скул смотрел?
Не работает, пытался разобраться с PyQt5 и tools скачивал через консоль. Всё равно не робит.
У меня вообще ошибку выдает "cannot import name 'QtWidjets' from 'PyQt5' (F:\Мои Работы\Python\pythonProject\venv\lib\site-packages\PyQt5\__init__.py)" а если убрать строчку
from PyQt5 import QtWidjets
то ничего не происходит, программа завершается и окно не создаётся!
Все решил проблему! Оказывается питон с русским не владах, а у меня в пути "Мои Работы"
Не 'QtWidjets' а 'QtWidgets'.
@@Tineke-so1ks Да, да, да! Спасибо за исправление
Как у вас открывается окно? У меня при нажатии на Run оно не появляется
Привет чел ну че решил проблему. Ото у меня такое же не могу решить .Ответь пожалуйста
Учусь по вашему видео с абсолютного ноля.После написания кода ничего не появляется что делаю не так?
Блин у меня нет Qapplication, QMainWindow тоже. ЧТО ДЕЛАТЬ??
А как сделать команду на кнопку?
from PyQt5 import QtWidgets
ImportError: DLL load failed: Не найден указанный модуль.
Как быть?
скорее всего вы не установили библиотеку PyQt5. У вас в директории питона поиск находит файл QtWidgets.pyd?
@@user-qs8vf5dm3c Что делать, если установил, но все же не находит?
@@aSS3SS По-моему, в настройках проекта в разделе "Interpreter" надо добавить пакет PyQt5 в виртуальное окружение. Не очень понял, почему автор видео об этом умолчал.
@@sorrow640 Ух, уже и не помню как решил эту проблему
PyQt5 не найден!
При привязки метода к кнопке у меня возникла ошибка. решилось путем присвоения проперти @pyqtSlot() перед методом add_label()
Ребята, прошу помощи!!!
Я создал файл main, но код в нём не подсвечивается и не выдаёт подсказок. Но если создать файл с другим именем, то в нём всё подсвечивается. В чём проблема? И ещё не запускается код, кнопка run не светится.
Значит дело в расширении или интерпретации. Похоже что редактор не понимает, что это за язык
До создания отдельного класса все хорошо и понятно. Дальше слишком быстро и без объяснений
ПОДСКАЖИТЕ, ЧТО ДЕЛАТЬ?!!!
При вводе
QAApplication выдаёт ошибку
Пишет
Cannot find referense Qapplication _init_. py.
Как это исправить я всю голову сломал
нашли решение ?
Ку, Гоша, что делать если ошибка, хотя код написан правильно(Открывал и через консоль, и напрямую)
Вот код
from PyQt5 import QtWidgets
from PyQt5 import QApplication, QMainWindow
import sys
def application():
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle('Programm')
window.setGeometry(300, 250, 350, 200)
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
application()
Уже разобрался ?
у тебя на предпоследней строчке __name__ а должно быть ___name___
2 нижних подчеркивания а не одно
@@zotkin я уже забыл про проинг, но спасибо, сегодня затестирую
@@aidarmelkow6080 хех
Обучаю Python! Посмотрите видосы. Буду рад :)
😘😘
Да откуда у вас всех есть этот clicked? У меня его и в помине нет, хотя кнопок две..
У меня все вот эти параметры внутри класса не работают. Открывается пустое окно просто без названия.
Проверь как написал функцию __init__, есть вероятность что ты написал случайно __int__ у тебя при создании экземпляра не выполняется код инициализации, потому что функция другая)
@@alrogast спасибо, но я уже даже не помню о чём речь 😄
как свои параметры окна и кнопок в конструктор класса передать??? Кто же на жесткую в класс параметры прописывает, а если новое окно нужно еще одно с другими размерами и текстом в лейблах, что новый класс создавать
Почему 2ой from с ошибкой у меня?
Ты выполнил pip install pyqt
что делать если пишет ModuleNotFoundError: No module named 'PyQt5'
хотя я его устанавливал
ничего
у меня не видит pyqt5 хотя она скачалась
Обясняеш ты кнш так себе, но чтото для себя взял
Вот момент с размерами. Разве нельзя задать размеры по процентам?
Можно поделить на высоту или ширину экрана вот тебе и проценты
@@luen6019 да, спасибо, но ведь могут быть разные экраны, вот как в таких случаях поступают? Чтобы у всех выглядела картинка качественно
@@Manu-ei6tn Я говорю делить на текущую ширину или высоту открытого экрана
@@Manu-ei6tn Высчитывать динамически
Все это делается через менеджеры компоновки (только там не проценты а соотношения)
При первом запуске (6:35) у меня окно мелькнёт и пропадает (закрывается). Но, "Process finished with exit code 0". В чём дело?
Ошибки:
1. Не PyQT а PyQt так как Qt это не аббревиатура а просто сочетание букв
2. Существует разница между методом и просто функцией (автор не в курсе?)
3. Функции и методы стоит называть не "как хочется" - а по нормальному.
Именование application явно не нормальное для функции. (используйте глаголы а не существительные)
4. В Qt не принято просто "кидать" элементы управления в окно, принято использовать менеджеры компоновки.
Что упущено и не растолковано, но критично важно:
1. Очередь сообщений ( то самое app.exec() это запуск обработки очереди)
2. Система сигналов и слотов. (то самое connect)
3. Система "владения" в виджетах.
4. Отсылки к оф. документации Qt.
У меня тоже 1 ошибка
@@dmitryfedoreev ?
Вообщем у меня не может найти cacao файл и не запускается. Я просто прочёл у тебя не правильно
@@dmitryfedoreev Я не понимаю о чем ты.
создатели Qt говорят, что это читается как "Кьют", соответственно PyQt = Пайкьют
Про классы не понял :(. Зачем класс сделали?
Я ещё подумал "как он будет работать с классом не через экземпляр". Спойлер, ни как)))
13:55
Одна вода не обесняя програму пишет хз что делают класы
Сделай авторизацию на Django!!!!!!!!!!!!!!!!!!!
6:30
Кы
Блин,сначала написали одним способом,потом переписали другим, и в итоге у меня получился самый обычный квадратик как в начале. Круто,ничего не сказать
та же херня
Надо вызвать функцию которая находится в классе
Обучаю Python! Посмотрите видосы. Буду рад :)
должно быть init, там где нижние подчеркивания и в следующей строчке где super, тоже init
Гоша, в кого ты такой молодец?
Все через жопу, текст идентичный как у тебя, он все равно находит ошибки
'this application failed to start because no Qt platform plugin could be initialized ' кто подскажет как быть?
Столкнулся. Лично у меня дело было в пути (сильно длинный). Перенес поближе к корню и заработало
@@Cherepashka6 в пути qt ?
@@Vlad-dp4mk в пути проекта. Перенеси его ближе к корню диска
@@Cherepashka6 я извиняюсь, а можно немного понятнее)
@@user-ip7pq2kh5q ну путь длинный слишком. Если проект будет лежать например в С:/папка/папка/папка/папка/папка/папка/папка/папка/папка, то работать не будет из за длинного пути. Попробуй перенести куда нибудь поближе к корню диска чтобы получилось С:/папка/папка например
Для тих в кого PyQt5 підкреслюється червоним і каже, що такого у тебе нема, то треба перевстановити його таким способом:
pip uninstall PyQt5
python -m pip install PyQt5
P.S.: проблема виникла у Visual Studio Code, в PyCharm вроді як все ок
У меня была такая же проблема, пока я не понял, что мой файл прям так и называется "PyQt5"
Это же kivy. Либо, очень похоже)
Ужас как круто, к нон статик классу обращаешься, используешь нон статик методы и при этом говоришь: "Ой, аргументы не надо передавать, не ставьте скобки"
Инициализация класса: "Я что шутка для тебя какая-то?"
А потом после ошибки говоришь: "Ой, что то не работает, все таки поставьте скобки!"
Ты вообще питон знаешь? Давно отписался от тебя и понимаю, что надо помочь другим понять, что ты хорошему не научишь. Идиотские объяснения "self", много другой фигни.
Итог: учите английский и смотрите официальные доки или зарубежные видео, а не этого клоуна.
С любовью, Вороночка!
Согласен с вами.
Лучше по возможности не использовать super
Почему?
Первая строка на фиг не нужна - даже пичарм ее серым выделяет. Продалбывать ворнинги - это хорошее начало.
C каких пор QtWidgets стал классом, когда это всегда был модуль?
А про app.exec_() -то нельзя было нормально объяснить, что это главный ивентлуп запускается и держит управление, а когда отработает, будет вызов sys.exit() ? "Ну так надо". Ну зашибись. А почему exec_, а не exec ? А почему не просто return app.exec() без всяких sys?
А что после установки PyCharm не будет видеть модуль PyQt5, про это не надо рассказывать?
За "программирование" на Qt Designer профессиональные разработчики сразу отрывают руки.
Дальше смотреть не стал, ну на хер.
так себе, много лишнего, можно в 2 раза уменьшить весь твой код
Сам не знает о чём говорит и пытается научить других 2:54
чел на питоне не пишет...
ролик безусловно очень информативный и крайне полезный, но я бы выделил одно ЖИРНОЕ "НО". кто целевая аудитория этого контента? в контексте приведенного в ролике кода, я бы поделил аудиторию на 2 группы: кто РЕАЛЬНО знает как работает ООП в питоне и все остальные. так вот для всех остальных крайне не рекомендовал бы поглощать данный материал, т.к. все чему вы научитесь - тупое повторение кода, а пояснения автора по поводу "чем вот этот self отличается от вот этого self" (на самом деле ничем) - знаний вам никаких не прибавят. для первой категории - крайне тяжело видеть как в контексте ролика по изучению библиотеки пытаются на пальцах (равно что безуспешно) преподать краткий курс ООП.
уважаемый автор, не нужно настолько распыляться, пытаясь в ролике по одной узко специфичной теме раскрыть особенности другой крайне широкой темы. к тому этапу, когда необходимо создать графический интерфейс приложения, человек априори должен иметь десятый дан по ООП в питоне, т.к. как вы верно отметили (и который вопрос напрашивался с самого начала видео - а нахрена писать функцию, если логичнее наследовать класс) - для более широкого функционала приложения необходима реализация через класс, а это ООП, а ООП это не хухры-мухры, это надо пережевывать долго и тщательно.
итого: исходя из кода в видео - контент для людей, знающих ООП. но все эти оговорки на счет того зачем в классе инициализатор (и да, ИНИЦИАЛИЗАТОР ЭТО НЕ КОНСТРУКТОР КЛАССА, если что) и зачем везде прописывать self - трата времени и усилий и ненужное разбавление хорошего концентрированного материала. автор, определитесь с целевой аудиторией. а все, кто хоть строчку не понимает из данного кода - не пытайтесь понять или гуглить конкретный вопрос, пользы это не даст. вам скорее всего надо КОМПЛЕКСНО изучить ОСНОВЫ питона, после этого - ООП в питоне, и только потом смотреть как ГУИ создавать, для вашего же блага.
не согласен кое с чем. вполне успешно создал ГУИ приложение в ткинтере для расчета плиссе. до этого не программировал вообще. Да, приложение полностью в одном файле (не считая того, что еще из экселя берет инфу), но тем не менее оно работает на виндовс из exe. Здесь оказался, потому что захотелось не только Ткинтер попробовать. А тут с середины видео self классы и прочее понеслось. Согласен что видео ни для новичков ни для профессионалов.
просто какое-то тараторение. Чему научиться можно? Нажимаем сюда, пишем вот это....зачем, почему, для чего? дизлайк
Все объяснено более менее но нужно знать язык программирования
ни хрена не понятно нк=у всеже дизлайк заслужил
Учи язык сначала малолетка
У кого просто квадратик лезет замените int на init
Или гляньте, чтобы это был __init__ с двумя прочерками по обе стороны :)). У меня вообще правых прочерков не было, не мог понять, пока твой коммент не прочитал.
6:54