Python и PyQt класс Qthread пример многопоточности

Поділитися
Вставка
  • Опубліковано 23 січ 2025

КОМЕНТАРІ • 95

  • @Ноунейм-п5я3и
    @Ноунейм-п5я3и 4 роки тому +3

    Давно надо было поменять тему.
    Ночью глаза вытекают с белой темы

  • @Jurlex
    @Jurlex Рік тому +2

    друг, спасибо, объяснения не очень понял, но порылся в коде и все получилось

  • @VladKrinitsin
    @VladKrinitsin Рік тому

    Спасибо, дружище! Только этот видос и помог мне разобраться в ситуации. Осталось только адаптировать это решение под мой код, но надеюсь, что я смогу это сделать

  • @Sinetilya2
    @Sinetilya2 5 років тому +2

    Коротко и ясно. Спасибо за видео!
    Благодаря вам теперь могу в прямом эфире отслеживать положение лазерного сканера, что-бы выставлять его перпендикулярно. Раньше постоянно тыкал в кнопку для обновления информации :) Надеюсь стану таким же умным :D

  • @vasyaklishch4184
    @vasyaklishch4184 5 років тому +4

    сделайте видео о том как работать с сигналами и слотами... ах да чуть не забыл Спасибо большое за такие видео. Побольше бы таких людей которые адекватно обьясняют

  • @legenov-mihail
    @legenov-mihail 5 років тому +3

    Мне понравилось. И да, чёрный вариант мне кажется красивее.

  • @ВладимирНовгородский-г6з

    Пытаюсь читать звук со звуковой карты в qthread - падает с ошибкой. В обычном потоке работает, но программа висит. Виндоус 11

  • @fedorivanov8420
    @fedorivanov8420 4 роки тому +1

    Как поймать сигнал от объекта из треда? Запустил я, предположим, соединение с сетью в отдельном потоке, а оно выполняется 10 секунд. Как мне поймать сиглан, который испустило соединение по факту установки? Соединение - это QTcpSocket.

    • @PyScientist
      @PyScientist  4 роки тому

      Попробуйте почитать про функцию QTcpSocket.waitForConnected() вместо использования сигналов. Или у вас ситуация где это принципиально нужно через сигналы?

    • @fedorivanov8420
      @fedorivanov8420 4 роки тому

      @@PyScientist проблема в этом и заключается - waitForConnected замораживает мне окно) При этом если не вызывать этот метод - отправка данных в сокет делается раньше, чем соединение установлено и естественно падает с ошибкой.

  • @bill8126
    @bill8126 11 місяців тому

    Из дочернего треда не дает изменять ГУИ объекты, пишет ошибку "QObject: Cannot create children for a parent that is in a different thread."

    • @PyScientist
      @PyScientist  11 місяців тому

      Можно через сигналы сделать. Это самый правильный вариант. То есть тригерить сигнал в потоке (есть для кастомизации сигналов свой класс, он немного отличается в pyqt4,5,6) обрабатывать сигнал и не будет таких ошибок

    • @bill8126
      @bill8126 11 місяців тому

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

  • @SergMirny_yt
    @SergMirny_yt 5 років тому +1

    Спасибо за урок. Полезно

  • @PolyuhovSA
    @PolyuhovSA 3 місяці тому

    Ребят а где найти видео 17.2?

    • @PyScientist
      @PyScientist  2 місяці тому

      Я так до него и не добрался

  • @shaltayb0ltay
    @shaltayb0ltay 3 роки тому +4

    Пример неверный. Недопустимо обращаться к элементам интерфейса из другого потока.
    Как верно пишут в комментариях, необходимо послать сигнал/событие из рабочего потока с долгими вычислениями в основной поток, что обрабатывает интерфейс.
    см. работу с signal в ua-cam.com/video/k5tIk7w50L4/v-deo.html

    • @PyScientist
      @PyScientist  3 роки тому +1

      В этом видео перемудрил. Получилось видео как делать не надо. Спасибо за комментарий.

  • @swartex92
    @swartex92 4 роки тому +1

    Годно объяснил) спасибо!

    • @PyScientist
      @PyScientist  4 роки тому

      Как в комментариях писали - лучше реализовывать многопоточность при изменении состояний виджетов через сигналы. Иначе можно поймать ошибку!
      То-есть при простом статус баре ещё проканает, а вот если, что-то более сложное, то могут быть проблемы.
      Кстати если нужна многопоточность или, что немного интереснее многопроцессность, не только в pyqt, то рекомендую присмотреться к threading и concurrent.futures. Они просты в использовании и черезвычайно эффективны.

  • @T4gr0id
    @T4gr0id 3 роки тому

    У меня после запуска данного скрипта в консоли спамится вот такая строка "QObject::setParent::Cannot set parent, new parent is in a different thread" и "QBackingStore::endPaint() called with active painter on backinstore paint device", а потом произходит вылет интерфейса и перезагрузка ядра. В чем трабла?

    • @PyScientist
      @PyScientist  3 роки тому +1

      Там способ не совсем корректный показан, см. комментарии выше. Он применим, но бывает вылетает.

    • @T4gr0id
      @T4gr0id 3 роки тому

      @@PyScientist а в след.видео корректный? Мне очень нужно, ваши видео очень понятные.

    • @PyScientist
      @PyScientist  3 роки тому +1

      По потокам у меня только это.( Не собрался продолжить(

    • @T4gr0id
      @T4gr0id 3 роки тому

      @@PyScientist А если попробовать таким способом? Создать новый класс, который наследован от QObject , написать метод run, который будет выполнять какой-то код, и передать инстанс этого класса в другой поток с помощью метода moveToThread

  • @SergMirny_yt
    @SergMirny_yt 4 роки тому +1

    С этим понятно. А как вернуть данные из потока параллельного? И если запускаешь экземпляр внешнего класса. В каком потоке работает этот экхемпляр в потоке родителя или в основном потоке?

  • @crashtv9274
    @crashtv9274 5 років тому +3

    Почему не на сигналах? Если по такой же схеме редактировать text edit много раз вылетит ошибка. На стаке пишут, что такой вариант неправильный

    • @PyScientist
      @PyScientist  5 років тому

      Не совсем понял, что значит на сигналах?

    • @PyScientist
      @PyScientist  5 років тому

      Да действительно он не безопасен может ошибка вылететь.

  • @muradaliev4500
    @muradaliev4500 5 років тому +1

    спасибо Сергей. был бы признателен, если было бы больше видео про петрофизику с python

    • @PyScientist
      @PyScientist  5 років тому +1

      Мурад, Вас понял! Будет и по петрофизике! Это мой конёк)

    • @muradaliev4500
      @muradaliev4500 5 років тому

      PyScientist Notes спасибо большое!
      Это очень интересно.
      Я написал вам на почту, гляньте, когда будет время, пожалуйста.

  • @НиколайСемищенко
    @НиколайСемищенко 5 років тому +8

    Выражение, эквивалентное time.sleep(0.2),
    дружественному к PyQt, выглядит следующим образом: QtCore.QThread.msleep(200)

    • @PyScientist
      @PyScientist  5 років тому +2

      Николай, спасибо за участие.)

    • @НиколайСемищенко
      @НиколайСемищенко 5 років тому +3

      @@PyScientist Спасибо вам за то что вы делаете.

    • @ЖеняОрлов-я3б
      @ЖеняОрлов-я3б 4 роки тому +1

      Да, но когда я подключил статус бар к своей программе, моя прога просто зависла из за time.sleep по этому лучше пользоваться много поточность!

    • @PyScientist
      @PyScientist  4 роки тому +1

      Николай имел ввиду, что вместе с многопоточностью нужно использовать вместо time.sleep, QThread.msleep. Что потокобезопасно.

    • @НиколайСемищенко
      @НиколайСемищенко 4 роки тому

      @@PyScientist вы правильно меня поняли, именно вместе с многопоточностью.

  • @e_starkov
    @e_starkov 4 роки тому +1

    Пожалуйста, скиньте код) то в точности тоже самое написал и ошибки выдаёт из-за mainwindow

    • @PyScientist
      @PyScientist  4 роки тому

      Евгений, добрый вечер листинг кода в первом комментарии к видео.

    • @potatoboss7778
      @potatoboss7778 4 роки тому

      @@PyScientist все глаза поломал, но не увидел

    • @PyScientist
      @PyScientist  4 роки тому

      @@potatoboss7778 Самый первый коммент 9 месяцев назад

  • @Yanterr
    @Yanterr 4 роки тому

    Может кто подсказать как сделать нормальное отображение при цикле?

    • @PyScientist
      @PyScientist  4 роки тому

      Как понять в цикле?

    • @Yanterr
      @Yanterr 4 роки тому

      Мне нужно ,что бы лэйбл грубо говоря менялся на 1 каждую секунду ,но вот при QT ,окно зависает .

  • @ivanpesotsky999
    @ivanpesotsky999 4 роки тому

    Подскажите, пожалуйста,откуда взялся mainwindow? Как он стал экземпляром класса myprogressbarwindow? Явное должно быть присваивание: mainwindow =myprogressbarwindow()

  • @c_i_k_a_d_a5009
    @c_i_k_a_d_a5009 5 років тому +1

    Здравствуйте! Подскажите, пожалуйста, можно ли вывести таблицы данных из postgresql в таблицы PyQt? Т.е. визуализировать данные в графическом интерфейсе? И каким образом это можно реализовать?

    • @PyScientist
      @PyScientist  5 років тому +1

      День добрый, тут вопрос больше не в том как импортировать PostgreSQL в pyqt. А как работать в python с PostgreSQL. Например, можно воспользоваться для этого psycopg2 это довольно удобная библиотека для работы с Python с базами данных postgreSQL. Ну а после того как разберётесь как импортировать данные, о поместить их в таблицу qtablewidget или qtableview не составит труда. Синтаксис похож на sqlite3 смотрите видео 13.1, про таблицы pyqt (qtablewiget) можно также узнать в моих видео, смотрите ссылки на предыдущие видео в описании!

  • @СелимирЗаленский
    @СелимирЗаленский 4 роки тому +1

    Темная тема лучше, я в своем пичарме давно так настроил. )

    • @PyScientist
      @PyScientist  4 роки тому

      Да я тоже ее прочувствовал, особенно вечером! Или ночером)

  • @devZu9
    @devZu9 4 роки тому

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

    • @PyScientist
      @PyScientist  4 роки тому

      Как-то другим отвлекся руки не дошли, нужно для порядка продолжить. Попробую собраться с силами)

  • @Ноунейм-п5я3и
    @Ноунейм-п5я3и 5 років тому +1

    Можно поинтересоваться сколько у вас опыта программирования на Python, Сергей.
    И какие книги вы бы порекомендовали по для новичков.
    И спасибо за качественный контент 👍🥇

    • @PyScientist
      @PyScientist  5 років тому +1

      Начал писать на python с 12 го года, как таковые книги, то мне оч. нравится
      Practical programming an introduction to computer science using python 3, Paul Gries, 2013. Second edition. Но это только на английском. Ещё хорошая learn python 3 the hard way. Все конечно зависит от того, для чего будете программировать.

    • @Ноунейм-п5я3и
      @Ноунейм-п5я3и 5 років тому

      @@PyScientist Спасибо за ответ. А программировать для себя и в идиале для дальнейшего труда устройства.
      А когда следующие видео, планах?

    • @PyScientist
      @PyScientist  5 років тому +2

      Если для себя, то "hard way" Вам подойдёт там детали как делать правильно. Следующее видео думаю будет недели через две, последний месяц два не выпускал ничего, работа ремонт и ещё кое-что не оставляет шансов на свободное время и любимое дело. Но это временно). Надо еще-бы страничку обновить. Но это уже если совсем свободно станет. Вот закончу с ремонтом тогда развернуть. Думаю на новогодних.

    • @Ноунейм-п5я3и
      @Ноунейм-п5я3и 5 років тому

      @@PyScientist Хорошо, тогда ждём от вас видеороликов под новый год 😉

  • @PuzuBlin4ik
    @PuzuBlin4ik Рік тому

    ты сделал гифку а не прогресс бар, прогресс чего ты замерял??? там реализация намного сложнее

  • @barkas2589
    @barkas2589 2 роки тому

    Спасибо

  • @user-fr5mg7vl8e
    @user-fr5mg7vl8e 4 роки тому +2

    На 1:00 в определении написано "Многопооточность"

  • @Юрій-к2я
    @Юрій-к2я 2 роки тому +1

    Вместо наследования лучше взять Слот и сигнал, так как при большом объеме информации приложение падает

    • @PyScientist
      @PyScientist  2 роки тому

      Да, все верно. Когда писал видео не знал об этом. Потом меня поправляли см. комментарии.

    • @n3tium
      @n3tium Рік тому

      привет. вижу что разбираешься в этом во всем механизме. подскажи какую-нибудь литературу по ооп питона и многопоточность, многозадачность. как вообще правильно строит архитектуру кода

    • @PyScientist
      @PyScientist  Рік тому

      @n3tium Привет, конкретно по питону даже затрудняюсь. Вообще по ООП и правильной архитектуре рекомендую clean code Robert C. Martin. там он на примере плюсов рассказывает, но принципы те же.
      По многозадачности/многопоточности начните с "Python на практике" Марк Саммерфилд.

    • @n3tium
      @n3tium Рік тому

      @@PyScientist спасибо, огромное!

  • @ДуджиМодульный
    @ДуджиМодульный 3 роки тому

    Что с окнами в пайчарме? Они как то все по другому расположены.
    Видео было мне полезно. Благодарю автора

    • @PyScientist
      @PyScientist  3 роки тому

      Что подрузамеваете под не так располженны? может версия сильно вперёд ушла, там ещё 2017 в видео 2020.3 который сейчас отличается. Но функционал тот же почти.

    • @ДуджиМодульный
      @ДуджиМодульный 3 роки тому

      @@PyScientist ну консоль сверху, с панелькой project что-то не так хз

    • @PyScientist
      @PyScientist  3 роки тому

      Ну так они плавающие, в любое место можно запихнуть

    • @ДуджиМодульный
      @ДуджиМодульный 3 роки тому +1

      @@PyScientist я понимаю. Это не претензия) Интересно, что вам так удобнее. Это необычно

    • @PyScientist
      @PyScientist  3 роки тому

      Простая привычка))

  • @PyScientist
    @PyScientist  5 років тому +1

    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_())

    • @PyScientist
      @PyScientist  4 роки тому +1

      @@SRFxVideos до конца должен доходить, но на счёт нестабильности то да там есть небезопасное перенесение в другой объект. Это небезопасно, см другие комментарии. Оставил это видео так как сам принцип правильный, а вот пример не совсем удачный.

  • @SergMirny_yt
    @SergMirny_yt 5 років тому +2

    От темной темы глаза меньше устают

  • @uninstaller1899
    @uninstaller1899 4 роки тому

    Почему нельзя сделать так, чтоб было всё понятно? Так и прет: "я такой умный, а вот вы никогда не догадаетесь откуда взялся mainwindow".

    • @PyScientist
      @PyScientist  4 роки тому

      Ну только спросить нужно если непонятно, я с радостью отвечу.

  • @madclips9967
    @madclips9967 4 роки тому

    self.alue+1

  • @evgenyzev4265
    @evgenyzev4265 5 років тому +2

    Ни черта не видно из-за темного фона!

    • @PyScientist
      @PyScientist  5 років тому

      Да вот я тоже думаю, как то не очень, кому-то нравится, а кому то нет. Вообще темный фон - это ночной режим, что-бы не было излишне ярко и глаза не уставали. Убедили, буду стандартный белый фон делать! Как раньше.

    • @devZu9
      @devZu9 4 роки тому +1

      @@PyScientist ну зачем... лучше ведь стало

    • @PyScientist
      @PyScientist  4 роки тому

      Оставил черный фон)

  • @shaggymuffson9977
    @shaggymuffson9977 2 роки тому +2

    Почему такие видео бесплатные, а всякие "не до курсы" продаются за деньги?

  • @Conigei
    @Conigei 2 роки тому

    Спасибо