Спасибо, дружище! Только этот видос и помог мне разобраться в ситуации. Осталось только адаптировать это решение под мой код, но надеюсь, что я смогу это сделать
Коротко и ясно. Спасибо за видео! Благодаря вам теперь могу в прямом эфире отслеживать положение лазерного сканера, что-бы выставлять его перпендикулярно. Раньше постоянно тыкал в кнопку для обновления информации :) Надеюсь стану таким же умным :D
сделайте видео о том как работать с сигналами и слотами... ах да чуть не забыл Спасибо большое за такие видео. Побольше бы таких людей которые адекватно обьясняют
Как поймать сигнал от объекта из треда? Запустил я, предположим, соединение с сетью в отдельном потоке, а оно выполняется 10 секунд. Как мне поймать сиглан, который испустило соединение по факту установки? Соединение - это QTcpSocket.
Попробуйте почитать про функцию QTcpSocket.waitForConnected() вместо использования сигналов. Или у вас ситуация где это принципиально нужно через сигналы?
@@PyScientist проблема в этом и заключается - waitForConnected замораживает мне окно) При этом если не вызывать этот метод - отправка данных в сокет делается раньше, чем соединение установлено и естественно падает с ошибкой.
Можно через сигналы сделать. Это самый правильный вариант. То есть тригерить сигнал в потоке (есть для кастомизации сигналов свой класс, он немного отличается в pyqt4,5,6) обрабатывать сигнал и не будет таких ошибок
@ntist да, первоначально я так и планировал, пока не наткнулся на это видео. Все таки работать сразу с объектом из нужного потока намного проще и удобнее. Но похоже придется через сигналы. Просто не пойму, почему у вас работает, а у меня выдает ошибку.
Пример неверный. Недопустимо обращаться к элементам интерфейса из другого потока. Как верно пишут в комментариях, необходимо послать сигнал/событие из рабочего потока с долгими вычислениями в основной поток, что обрабатывает интерфейс. см. работу с signal в ua-cam.com/video/k5tIk7w50L4/v-deo.html
Как в комментариях писали - лучше реализовывать многопоточность при изменении состояний виджетов через сигналы. Иначе можно поймать ошибку! То-есть при простом статус баре ещё проканает, а вот если, что-то более сложное, то могут быть проблемы. Кстати если нужна многопоточность или, что немного интереснее многопроцессность, не только в pyqt, то рекомендую присмотреться к threading и concurrent.futures. Они просты в использовании и черезвычайно эффективны.
У меня после запуска данного скрипта в консоли спамится вот такая строка "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 (тем более вы его как бы презентуете в конце), а на канале я его не нашёл.
Можно поинтересоваться сколько у вас опыта программирования на 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" Вам подойдёт там детали как делать правильно. Следующее видео думаю будет недели через две, последний месяц два не выпускал ничего, работа ремонт и ещё кое-что не оставляет шансов на свободное время и любимое дело. Но это временно). Надо еще-бы страничку обновить. Но это уже если совсем свободно станет. Вот закончу с ремонтом тогда развернуть. Думаю на новогодних.
привет. вижу что разбираешься в этом во всем механизме. подскажи какую-нибудь литературу по ооп питона и многопоточность, многозадачность. как вообще правильно строит архитектуру кода
@n3tium Привет, конкретно по питону даже затрудняюсь. Вообще по ООП и правильной архитектуре рекомендую clean code Robert C. Martin. там он на примере плюсов рассказывает, но принципы те же. По многозадачности/многопоточности начните с "Python на практике" Марк Саммерфилд.
Что подрузамеваете под не так располженны? может версия сильно вперёд ушла, там ещё 2017 в видео 2020.3 который сейчас отличается. Но функционал тот же почти.
@@SRFxVideos до конца должен доходить, но на счёт нестабильности то да там есть небезопасное перенесение в другой объект. Это небезопасно, см другие комментарии. Оставил это видео так как сам принцип правильный, а вот пример не совсем удачный.
Да вот я тоже думаю, как то не очень, кому-то нравится, а кому то нет. Вообще темный фон - это ночной режим, что-бы не было излишне ярко и глаза не уставали. Убедили, буду стандартный белый фон делать! Как раньше.
Давно надо было поменять тему.
Ночью глаза вытекают с белой темы
друг, спасибо, объяснения не очень понял, но порылся в коде и все получилось
Спасибо, дружище! Только этот видос и помог мне разобраться в ситуации. Осталось только адаптировать это решение под мой код, но надеюсь, что я смогу это сделать
Коротко и ясно. Спасибо за видео!
Благодаря вам теперь могу в прямом эфире отслеживать положение лазерного сканера, что-бы выставлять его перпендикулярно. Раньше постоянно тыкал в кнопку для обновления информации :) Надеюсь стану таким же умным :D
сделайте видео о том как работать с сигналами и слотами... ах да чуть не забыл Спасибо большое за такие видео. Побольше бы таких людей которые адекватно обьясняют
Плюсую
Мне понравилось. И да, чёрный вариант мне кажется красивее.
Пытаюсь читать звук со звуковой карты в qthread - падает с ошибкой. В обычном потоке работает, но программа висит. Виндоус 11
Как поймать сигнал от объекта из треда? Запустил я, предположим, соединение с сетью в отдельном потоке, а оно выполняется 10 секунд. Как мне поймать сиглан, который испустило соединение по факту установки? Соединение - это QTcpSocket.
Попробуйте почитать про функцию QTcpSocket.waitForConnected() вместо использования сигналов. Или у вас ситуация где это принципиально нужно через сигналы?
@@PyScientist проблема в этом и заключается - waitForConnected замораживает мне окно) При этом если не вызывать этот метод - отправка данных в сокет делается раньше, чем соединение установлено и естественно падает с ошибкой.
Из дочернего треда не дает изменять ГУИ объекты, пишет ошибку "QObject: Cannot create children for a parent that is in a different thread."
Можно через сигналы сделать. Это самый правильный вариант. То есть тригерить сигнал в потоке (есть для кастомизации сигналов свой класс, он немного отличается в pyqt4,5,6) обрабатывать сигнал и не будет таких ошибок
@ntist да, первоначально я так и планировал, пока не наткнулся на это видео. Все таки работать сразу с объектом из нужного потока намного проще и удобнее. Но похоже придется через сигналы.
Просто не пойму, почему у вас работает, а у меня выдает ошибку.
Спасибо за урок. Полезно
Ребят а где найти видео 17.2?
Я так до него и не добрался
Пример неверный. Недопустимо обращаться к элементам интерфейса из другого потока.
Как верно пишут в комментариях, необходимо послать сигнал/событие из рабочего потока с долгими вычислениями в основной поток, что обрабатывает интерфейс.
см. работу с signal в ua-cam.com/video/k5tIk7w50L4/v-deo.html
В этом видео перемудрил. Получилось видео как делать не надо. Спасибо за комментарий.
Годно объяснил) спасибо!
Как в комментариях писали - лучше реализовывать многопоточность при изменении состояний виджетов через сигналы. Иначе можно поймать ошибку!
То-есть при простом статус баре ещё проканает, а вот если, что-то более сложное, то могут быть проблемы.
Кстати если нужна многопоточность или, что немного интереснее многопроцессность, не только в pyqt, то рекомендую присмотреться к threading и concurrent.futures. Они просты в использовании и черезвычайно эффективны.
У меня после запуска данного скрипта в консоли спамится вот такая строка "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
С этим понятно. А как вернуть данные из потока параллельного? И если запускаешь экземпляр внешнего класса. В каком потоке работает этот экхемпляр в потоке родителя или в основном потоке?
Почему не на сигналах? Если по такой же схеме редактировать text edit много раз вылетит ошибка. На стаке пишут, что такой вариант неправильный
Не совсем понял, что значит на сигналах?
Да действительно он не безопасен может ошибка вылететь.
спасибо Сергей. был бы признателен, если было бы больше видео про петрофизику с python
Мурад, Вас понял! Будет и по петрофизике! Это мой конёк)
PyScientist Notes спасибо большое!
Это очень интересно.
Я написал вам на почту, гляньте, когда будет время, пожалуйста.
Выражение, эквивалентное time.sleep(0.2),
дружественному к PyQt, выглядит следующим образом: QtCore.QThread.msleep(200)
Николай, спасибо за участие.)
@@PyScientist Спасибо вам за то что вы делаете.
Да, но когда я подключил статус бар к своей программе, моя прога просто зависла из за time.sleep по этому лучше пользоваться много поточность!
Николай имел ввиду, что вместе с многопоточностью нужно использовать вместо time.sleep, QThread.msleep. Что потокобезопасно.
@@PyScientist вы правильно меня поняли, именно вместе с многопоточностью.
Пожалуйста, скиньте код) то в точности тоже самое написал и ошибки выдаёт из-за mainwindow
Евгений, добрый вечер листинг кода в первом комментарии к видео.
@@PyScientist все глаза поломал, но не увидел
@@potatoboss7778 Самый первый коммент 9 месяцев назад
Может кто подсказать как сделать нормальное отображение при цикле?
Как понять в цикле?
Мне нужно ,что бы лэйбл грубо говоря менялся на 1 каждую секунду ,но вот при QT ,окно зависает .
Подскажите, пожалуйста,откуда взялся 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 (тем более вы его как бы презентуете в конце), а на канале я его не нашёл.
Как-то другим отвлекся руки не дошли, нужно для порядка продолжить. Попробую собраться с силами)
Можно поинтересоваться сколько у вас опыта программирования на 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 Хорошо, тогда ждём от вас видеороликов под новый год 😉
ты сделал гифку а не прогресс бар, прогресс чего ты замерял??? там реализация намного сложнее
Спасибо
На 1:00 в определении написано "Многопооточность"
Вместо наследования лучше взять Слот и сигнал, так как при большом объеме информации приложение падает
Да, все верно. Когда писал видео не знал об этом. Потом меня поправляли см. комментарии.
привет. вижу что разбираешься в этом во всем механизме. подскажи какую-нибудь литературу по ооп питона и многопоточность, многозадачность. как вообще правильно строит архитектуру кода
@n3tium Привет, конкретно по питону даже затрудняюсь. Вообще по ООП и правильной архитектуре рекомендую clean code Robert C. Martin. там он на примере плюсов рассказывает, но принципы те же.
По многозадачности/многопоточности начните с "Python на практике" Марк Саммерфилд.
@@PyScientist спасибо, огромное!
Что с окнами в пайчарме? Они как то все по другому расположены.
Видео было мне полезно. Благодарю автора
Что подрузамеваете под не так располженны? может версия сильно вперёд ушла, там ещё 2017 в видео 2020.3 который сейчас отличается. Но функционал тот же почти.
@@PyScientist ну консоль сверху, с панелькой project что-то не так хз
Ну так они плавающие, в любое место можно запихнуть
@@PyScientist я понимаю. Это не претензия) Интересно, что вам так удобнее. Это необычно
Простая привычка))
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 до конца должен доходить, но на счёт нестабильности то да там есть небезопасное перенесение в другой объект. Это небезопасно, см другие комментарии. Оставил это видео так как сам принцип правильный, а вот пример не совсем удачный.
От темной темы глаза меньше устают
Почему нельзя сделать так, чтоб было всё понятно? Так и прет: "я такой умный, а вот вы никогда не догадаетесь откуда взялся mainwindow".
Ну только спросить нужно если непонятно, я с радостью отвечу.
self.alue+1
Ни черта не видно из-за темного фона!
Да вот я тоже думаю, как то не очень, кому-то нравится, а кому то нет. Вообще темный фон - это ночной режим, что-бы не было излишне ярко и глаза не уставали. Убедили, буду стандартный белый фон делать! Как раньше.
@@PyScientist ну зачем... лучше ведь стало
Оставил черный фон)
Почему такие видео бесплатные, а всякие "не до курсы" продаются за деньги?
Спасибо