Коротко и ясно. Спасибо за видео! Благодаря вам теперь могу в прямом эфире отслеживать положение лазерного сканера, что-бы выставлять его перпендикулярно. Раньше постоянно тыкал в кнопку для обновления информации :) Надеюсь стану таким же умным :D
Спасибо, дружище! Только этот видос и помог мне разобраться в ситуации. Осталось только адаптировать это решение под мой код, но надеюсь, что я смогу это сделать
сделайте видео о том как работать с сигналами и слотами... ах да чуть не забыл Спасибо большое за такие видео. Побольше бы таких людей которые адекватно обьясняют
Как поймать сигнал от объекта из треда? Запустил я, предположим, соединение с сетью в отдельном потоке, а оно выполняется 10 секунд. Как мне поймать сиглан, который испустило соединение по факту установки? Соединение - это QTcpSocket.
Попробуйте почитать про функцию QTcpSocket.waitForConnected() вместо использования сигналов. Или у вас ситуация где это принципиально нужно через сигналы?
@@PyScientist проблема в этом и заключается - waitForConnected замораживает мне окно) При этом если не вызывать этот метод - отправка данных в сокет делается раньше, чем соединение установлено и естественно падает с ошибкой.
С этим понятно. А как вернуть данные из потока параллельного? И если запускаешь экземпляр внешнего класса. В каком потоке работает этот экхемпляр в потоке родителя или в основном потоке?
Пример неверный. Недопустимо обращаться к элементам интерфейса из другого потока. Как верно пишут в комментариях, необходимо послать сигнал/событие из рабочего потока с долгими вычислениями в основной поток, что обрабатывает интерфейс. см. работу с signal в th-cam.com/video/k5tIk7w50L4/w-d-xo.html
Можно через сигналы сделать. Это самый правильный вариант. То есть тригерить сигнал в потоке (есть для кастомизации сигналов свой класс, он немного отличается в pyqt4,5,6) обрабатывать сигнал и не будет таких ошибок
@ntist да, первоначально я так и планировал, пока не наткнулся на это видео. Все таки работать сразу с объектом из нужного потока намного проще и удобнее. Но похоже придется через сигналы. Просто не пойму, почему у вас работает, а у меня выдает ошибку.
У меня после запуска данного скрипта в консоли спамится вот такая строка "QObject::setParent::Cannot set parent, new parent is in a different thread" и "QBackingStore::endPaint() called with active painter on backinstore paint device", а потом произходит вылет интерфейса и перезагрузка ядра. В чем трабла?
@@PyScientist А если попробовать таким способом? Создать новый класс, который наследован от QObject , написать метод run, который будет выполнять какой-то код, и передать инстанс этого класса в другой поток с помощью метода moveToThread
Подскажите, пожалуйста,откуда взялся mainwindow? Как он стал экземпляром класса myprogressbarwindow? Явное должно быть присваивание: mainwindow =myprogressbarwindow()
Здравствуйте! Подскажите, пожалуйста, можно ли вывести таблицы данных из postgresql в таблицы PyQt? Т.е. визуализировать данные в графическом интерфейсе? И каким образом это можно реализовать?
День добрый, тут вопрос больше не в том как импортировать PostgreSQL в pyqt. А как работать в python с PostgreSQL. Например, можно воспользоваться для этого psycopg2 это довольно удобная библиотека для работы с Python с базами данных postgreSQL. Ну а после того как разберётесь как импортировать данные, о поместить их в таблицу qtablewidget или qtableview не составит труда. Синтаксис похож на sqlite3 смотрите видео 13.1, про таблицы pyqt (qtablewiget) можно также узнать в моих видео, смотрите ссылки на предыдущие видео в описании!
Здравствуйте, простите, а где видео 17.2 ? А то я вижу, что текущее видео сделано 1.5 года назад. Думал уже есть #17.2 (тем более вы его как бы презентуете в конце), а на канале я его не нашёл.
Как в комментариях писали - лучше реализовывать многопоточность при изменении состояний виджетов через сигналы. Иначе можно поймать ошибку! То-есть при простом статус баре ещё проканает, а вот если, что-то более сложное, то могут быть проблемы. Кстати если нужна многопоточность или, что немного интереснее многопроцессность, не только в pyqt, то рекомендую присмотреться к threading и concurrent.futures. Они просты в использовании и черезвычайно эффективны.
@@SRFxVideos до конца должен доходить, но на счёт нестабильности то да там есть небезопасное перенесение в другой объект. Это небезопасно, см другие комментарии. Оставил это видео так как сам принцип правильный, а вот пример не совсем удачный.
привет. вижу что разбираешься в этом во всем механизме. подскажи какую-нибудь литературу по ооп питона и многопоточность, многозадачность. как вообще правильно строит архитектуру кода
@n3tium Привет, конкретно по питону даже затрудняюсь. Вообще по ООП и правильной архитектуре рекомендую clean code Robert C. Martin. там он на примере плюсов рассказывает, но принципы те же. По многозадачности/многопоточности начните с "Python на практике" Марк Саммерфилд.
Можно поинтересоваться сколько у вас опыта программирования на Python, Сергей. И какие книги вы бы порекомендовали по для новичков. И спасибо за качественный контент 👍🥇
Начал писать на python с 12 го года, как таковые книги, то мне оч. нравится Practical programming an introduction to computer science using python 3, Paul Gries, 2013. Second edition. Но это только на английском. Ещё хорошая learn python 3 the hard way. Все конечно зависит от того, для чего будете программировать.
Если для себя, то "hard way" Вам подойдёт там детали как делать правильно. Следующее видео думаю будет недели через две, последний месяц два не выпускал ничего, работа ремонт и ещё кое-что не оставляет шансов на свободное время и любимое дело. Но это временно). Надо еще-бы страничку обновить. Но это уже если совсем свободно станет. Вот закончу с ремонтом тогда развернуть. Думаю на новогодних.
Что подрузамеваете под не так располженны? может версия сильно вперёд ушла, там ещё 2017 в видео 2020.3 который сейчас отличается. Но функционал тот же почти.
Да вот я тоже думаю, как то не очень, кому-то нравится, а кому то нет. Вообще темный фон - это ночной режим, что-бы не было излишне ярко и глаза не уставали. Убедили, буду стандартный белый фон делать! Как раньше.
друг, спасибо, объяснения не очень понял, но порылся в коде и все получилось
Коротко и ясно. Спасибо за видео!
Благодаря вам теперь могу в прямом эфире отслеживать положение лазерного сканера, что-бы выставлять его перпендикулярно. Раньше постоянно тыкал в кнопку для обновления информации :) Надеюсь стану таким же умным :D
Давно надо было поменять тему.
Ночью глаза вытекают с белой темы
Спасибо, дружище! Только этот видос и помог мне разобраться в ситуации. Осталось только адаптировать это решение под мой код, но надеюсь, что я смогу это сделать
Пытаюсь читать звук со звуковой карты в qthread - падает с ошибкой. В обычном потоке работает, но программа висит. Виндоус 11
сделайте видео о том как работать с сигналами и слотами... ах да чуть не забыл Спасибо большое за такие видео. Побольше бы таких людей которые адекватно обьясняют
Плюсую
Как поймать сигнал от объекта из треда? Запустил я, предположим, соединение с сетью в отдельном потоке, а оно выполняется 10 секунд. Как мне поймать сиглан, который испустило соединение по факту установки? Соединение - это QTcpSocket.
Попробуйте почитать про функцию QTcpSocket.waitForConnected() вместо использования сигналов. Или у вас ситуация где это принципиально нужно через сигналы?
@@PyScientist проблема в этом и заключается - waitForConnected замораживает мне окно) При этом если не вызывать этот метод - отправка данных в сокет делается раньше, чем соединение установлено и естественно падает с ошибкой.
С этим понятно. А как вернуть данные из потока параллельного? И если запускаешь экземпляр внешнего класса. В каком потоке работает этот экхемпляр в потоке родителя или в основном потоке?
Почему не на сигналах? Если по такой же схеме редактировать text edit много раз вылетит ошибка. На стаке пишут, что такой вариант неправильный
Не совсем понял, что значит на сигналах?
Да действительно он не безопасен может ошибка вылететь.
Пример неверный. Недопустимо обращаться к элементам интерфейса из другого потока.
Как верно пишут в комментариях, необходимо послать сигнал/событие из рабочего потока с долгими вычислениями в основной поток, что обрабатывает интерфейс.
см. работу с signal в th-cam.com/video/k5tIk7w50L4/w-d-xo.html
В этом видео перемудрил. Получилось видео как делать не надо. Спасибо за комментарий.
Мне понравилось. И да, чёрный вариант мне кажется красивее.
Из дочернего треда не дает изменять ГУИ объекты, пишет ошибку "QObject: Cannot create children for a parent that is in a different thread."
Можно через сигналы сделать. Это самый правильный вариант. То есть тригерить сигнал в потоке (есть для кастомизации сигналов свой класс, он немного отличается в pyqt4,5,6) обрабатывать сигнал и не будет таких ошибок
@ntist да, первоначально я так и планировал, пока не наткнулся на это видео. Все таки работать сразу с объектом из нужного потока намного проще и удобнее. Но похоже придется через сигналы.
Просто не пойму, почему у вас работает, а у меня выдает ошибку.
У меня после запуска данного скрипта в консоли спамится вот такая строка "QObject::setParent::Cannot set parent, new parent is in a different thread" и "QBackingStore::endPaint() called with active painter on backinstore paint device", а потом произходит вылет интерфейса и перезагрузка ядра. В чем трабла?
Там способ не совсем корректный показан, см. комментарии выше. Он применим, но бывает вылетает.
@@PyScientist а в след.видео корректный? Мне очень нужно, ваши видео очень понятные.
По потокам у меня только это.( Не собрался продолжить(
@@PyScientist А если попробовать таким способом? Создать новый класс, который наследован от QObject , написать метод run, который будет выполнять какой-то код, и передать инстанс этого класса в другой поток с помощью метода moveToThread
Выражение, эквивалентное time.sleep(0.2),
дружественному к PyQt, выглядит следующим образом: QtCore.QThread.msleep(200)
Николай, спасибо за участие.)
@@PyScientist Спасибо вам за то что вы делаете.
Да, но когда я подключил статус бар к своей программе, моя прога просто зависла из за time.sleep по этому лучше пользоваться много поточность!
Николай имел ввиду, что вместе с многопоточностью нужно использовать вместо time.sleep, QThread.msleep. Что потокобезопасно.
@@PyScientist вы правильно меня поняли, именно вместе с многопоточностью.
Подскажите, пожалуйста,откуда взялся mainwindow? Как он стал экземпляром класса myprogressbarwindow? Явное должно быть присваивание: mainwindow =myprogressbarwindow()
Ребят а где найти видео 17.2?
Я так до него и не добрался
Пожалуйста, скиньте код) то в точности тоже самое написал и ошибки выдаёт из-за mainwindow
Евгений, добрый вечер листинг кода в первом комментарии к видео.
@@PyScientist все глаза поломал, но не увидел
@@potatoboss7778 Самый первый коммент 9 месяцев назад
Здравствуйте! Подскажите, пожалуйста, можно ли вывести таблицы данных из postgresql в таблицы PyQt? Т.е. визуализировать данные в графическом интерфейсе? И каким образом это можно реализовать?
День добрый, тут вопрос больше не в том как импортировать PostgreSQL в pyqt. А как работать в python с PostgreSQL. Например, можно воспользоваться для этого psycopg2 это довольно удобная библиотека для работы с Python с базами данных postgreSQL. Ну а после того как разберётесь как импортировать данные, о поместить их в таблицу qtablewidget или qtableview не составит труда. Синтаксис похож на sqlite3 смотрите видео 13.1, про таблицы pyqt (qtablewiget) можно также узнать в моих видео, смотрите ссылки на предыдущие видео в описании!
Здравствуйте, простите, а где видео 17.2 ? А то я вижу, что текущее видео сделано 1.5 года назад. Думал уже есть #17.2 (тем более вы его как бы презентуете в конце), а на канале я его не нашёл.
Как-то другим отвлекся руки не дошли, нужно для порядка продолжить. Попробую собраться с силами)
Годно объяснил) спасибо!
Как в комментариях писали - лучше реализовывать многопоточность при изменении состояний виджетов через сигналы. Иначе можно поймать ошибку!
То-есть при простом статус баре ещё проканает, а вот если, что-то более сложное, то могут быть проблемы.
Кстати если нужна многопоточность или, что немного интереснее многопроцессность, не только в pyqt, то рекомендую присмотреться к threading и concurrent.futures. Они просты в использовании и черезвычайно эффективны.
Спасибо за урок. Полезно
ты сделал гифку а не прогресс бар, прогресс чего ты замерял??? там реализация намного сложнее
На 1:00 в определении написано "Многопооточность"
Может кто подсказать как сделать нормальное отображение при цикле?
Как понять в цикле?
Мне нужно ,что бы лэйбл грубо говоря менялся на 1 каждую секунду ,но вот при QT ,окно зависает .
import sys, time
from PyQt5.QtWidgets import QApplication, QDialog, QPushButton, QProgressBar, QTextEdit, QVBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtCore import QThread
class ProgressBarThresd(QThread):
def __init__(self, mainwindow, parent=None):
super().__init__()
self.mainwindow = mainwindow
def run(self):
value = 0
while value < 100:
value = value+1
self.mainwindow.progressbar.setValue(value)
time.sleep(0.2)
class MyProgressbarWindow(QDialog):
def __init__(self, parent=None):
super().__init__()
self.progressbar = QProgressBar()
self.progressbar.setAlignment(Qt.AlignCenter)
self.PushButtonLaunchLoading = QPushButton('Launch Loading')
self.TextEditer = QTextEdit()
self.setGeometry(300, 400, 300, 150)
vbox = QVBoxLayout()
vbox.addWidget(self.PushButtonLaunchLoading)
vbox.addWidget(self.TextEditer)
vbox.addWidget(self.progressbar)
self.setLayout(vbox)
self.PushButtonLaunchLoading.clicked.connect(self.launch_progress_bar_filling)
self.ProgresbarThread_instance = ProgressBarThresd(mainwindow=self)
def launch_progress_bar_filling(self):
self.ProgresbarThread_instance.start()
app = QApplication(sys.argv)
main = MyProgressbarWindow()
main.show()
sys.exit(app.exec_())
@@SRFxVideos до конца должен доходить, но на счёт нестабильности то да там есть небезопасное перенесение в другой объект. Это небезопасно, см другие комментарии. Оставил это видео так как сам принцип правильный, а вот пример не совсем удачный.
спасибо Сергей. был бы признателен, если было бы больше видео про петрофизику с python
Мурад, Вас понял! Будет и по петрофизике! Это мой конёк)
PyScientist Notes спасибо большое!
Это очень интересно.
Я написал вам на почту, гляньте, когда будет время, пожалуйста.
Спасибо
Вместо наследования лучше взять Слот и сигнал, так как при большом объеме информации приложение падает
Да, все верно. Когда писал видео не знал об этом. Потом меня поправляли см. комментарии.
привет. вижу что разбираешься в этом во всем механизме. подскажи какую-нибудь литературу по ооп питона и многопоточность, многозадачность. как вообще правильно строит архитектуру кода
@n3tium Привет, конкретно по питону даже затрудняюсь. Вообще по ООП и правильной архитектуре рекомендую clean code Robert C. Martin. там он на примере плюсов рассказывает, но принципы те же.
По многозадачности/многопоточности начните с "Python на практике" Марк Саммерфилд.
@@PyScientist спасибо, огромное!
Темная тема лучше, я в своем пичарме давно так настроил. )
Да я тоже ее прочувствовал, особенно вечером! Или ночером)
Можно поинтересоваться сколько у вас опыта программирования на Python, Сергей.
И какие книги вы бы порекомендовали по для новичков.
И спасибо за качественный контент 👍🥇
Начал писать на python с 12 го года, как таковые книги, то мне оч. нравится
Practical programming an introduction to computer science using python 3, Paul Gries, 2013. Second edition. Но это только на английском. Ещё хорошая learn python 3 the hard way. Все конечно зависит от того, для чего будете программировать.
@@PyScientist Спасибо за ответ. А программировать для себя и в идиале для дальнейшего труда устройства.
А когда следующие видео, планах?
Если для себя, то "hard way" Вам подойдёт там детали как делать правильно. Следующее видео думаю будет недели через две, последний месяц два не выпускал ничего, работа ремонт и ещё кое-что не оставляет шансов на свободное время и любимое дело. Но это временно). Надо еще-бы страничку обновить. Но это уже если совсем свободно станет. Вот закончу с ремонтом тогда развернуть. Думаю на новогодних.
@@PyScientist Хорошо, тогда ждём от вас видеороликов под новый год 😉
Что с окнами в пайчарме? Они как то все по другому расположены.
Видео было мне полезно. Благодарю автора
Что подрузамеваете под не так располженны? может версия сильно вперёд ушла, там ещё 2017 в видео 2020.3 который сейчас отличается. Но функционал тот же почти.
@@PyScientist ну консоль сверху, с панелькой project что-то не так хз
Ну так они плавающие, в любое место можно запихнуть
@@PyScientist я понимаю. Это не претензия) Интересно, что вам так удобнее. Это необычно
Простая привычка))
От темной темы глаза меньше устают
Почему нельзя сделать так, чтоб было всё понятно? Так и прет: "я такой умный, а вот вы никогда не догадаетесь откуда взялся mainwindow".
Ну только спросить нужно если непонятно, я с радостью отвечу.
self.alue+1
Ни черта не видно из-за темного фона!
Да вот я тоже думаю, как то не очень, кому-то нравится, а кому то нет. Вообще темный фон - это ночной режим, что-бы не было излишне ярко и глаза не уставали. Убедили, буду стандартный белый фон делать! Как раньше.
@@PyScientist ну зачем... лучше ведь стало
Оставил черный фон)
Почему такие видео бесплатные, а всякие "не до курсы" продаются за деньги?
Спасибо