С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
3 / 3 / 1
Регистрация: 06.02.2018
Сообщений: 5
PyQt5

Pyqt5 потоки

06.02.2018, 19:09. Показов 9438. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу программу для винды. Собственно ничего особенного, кликает по заранее заданным координатам и выполняет ряд функций. Интерфейс написан с использованием pyqt5. Вопрос в следующем. Гуи зависает, потому что основной функционал не отправлен в отдельный поток. В этом и вопрос..Как организовать потоки в pyqt5 ? прочёл не мало форумов и примеров. не понятно. Если есть, кто-то, кто может доходчиво объяснить, буду очень признателен. Часть кода прилагается..

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Clicker(QMainWindow):
    # click objects 
    objects_list = ['Start', 'OptimizResult','ScreenShot','Drawdown','ProfitResult',
                    'OnTesterResult','UnderArrow','Arrow','BestResult','SetParams',
                    'SwitchModel','Report','ReportRightClick','SaveReportAs',
                    'FileName','SaveFile','CloseHTML','Settings', 'OptimizedSymbol',
                    'OptimizationMark']  
    # cpu parameters entry
    check_cpu_dict = {'ProcName': '', 'CheckCPUTimer': '', 'ProcPerc': '', 'CollectingTimer': '', 'Optimizations_qty': ''}    
    # glabal vars
    objects_dict = {} # create dict in the kind: Object: {X-coord: , Y-coord: }
    symbols = [] # enetred symbols
    optimization_type = '' # optimization model
    test_type = '' # test model
    
    def __init__(self):
        super(Clicker,self).__init__()
        loadUi('C:/Users/%username%/Anaconda3/Lib/site-packages/pyqt5-tools/designer_test/clicker.ui',self)
        self.setWindowTitle('AI')
        self.StartAI.clicked.connect(self.start_ai_clicked)
        self.Save_params.clicked.connect(self.save_button_clicked)
        self.Load_params.clicked.connect(self.load_button_clicked)
        self.objects_dict = {name:{'X': '', 'Y': ''} for name in self.objects_list}
    @pyqtSlot()
    def start_ai_clicked(self):
        self.get_entered_data()
        ai = AI(coordinates=self.objects_dict, cpu_parameters=self.check_cpu_dict,optimization_type=self.optimization_type,
                test_type= self.test_type,symbols = self.symbols)
        
        ai.start()
 
if __name__ == '__main__':
    app = QtCore.QCoreApplication.instance()
    if app is None:
        app = QApplication(sys.argv)
    ex = Clicker()
    ex.show()
    app.exec_()
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2018, 19:09
Ответы с готовыми решениями:

Python и Pyqt5: потоки
Добрый день, программисты. Я начинающий программист. У меня есть такая задача: Есть окно PyQt(внутри него QWebView - отображаеться html...

Все методы и атрибуты PyQt5.QtGui PyQt5.Qtwdigets и QtCore
На официальной документации модуля я не нашёл все методы и атрибуты PyQt5. может дадите источник со всем этим добром??? Буду вам очень...

PyQt5 Error while finding module specification for 'PyQt5.uic.pyuic' (ModuleNotFoundError: No module named 'PyQt
В общем поставил pyqt5 и python3.7 пишу в консоль python -m PyQt5.uic.pyuic Выдает ошибку Error while finding module specification for...

5
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.02.2018, 21:55
manibashkas, не знаю, что тебе не понятно, ну вот ещё 1 пример по работе с потоками. Все, что тебе нужно изучить касательно работы с потоками в pyqt это работа с сигналами и слотами, все.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Пример передачи в сигнале различных типов данных
"""
import sys
import time
import threading
 
from PyQt5 import QtWidgets, QtCore
 
 
def thread(my_func):
    """
    Запускает функцию в отдельном потоке
    """
    def wrapper(*args, **kwargs):
        my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
        my_thread.start()
    return wrapper
 
@thread
def processing(signal):
    """
    Эмулирует обработку (скачивание) каких-то данных
    """
    res = [i for i in 'hello']
    time.sleep(5)
    signal.emit(res)  # Посылаем сигнал в котором передаём полученные данные
 
 
class MyWidget(QtWidgets.QWidget):
    my_signal = QtCore.pyqtSignal(list, name='my_signal')
 
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.mainLayout = QtWidgets.QHBoxLayout()
        self.setLayout(self.mainLayout)
 
        self.button = QtWidgets.QPushButton("Emit your signal!", self)
        self.mainLayout.addWidget(self.button)
 
        # При нажатии на кнопку запускаем обработку данных
        self.button.clicked.connect(lambda: processing(self.my_signal))
 
        # Обработчик сигнала
        self.my_signal.connect(self.mySignalHandler, QtCore.Qt.QueuedConnection)
 
    def mySignalHandler(self, data):  # Вызывается для обработки сигнала
        print(data)
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    app.exec_()
0
3 / 3 / 1
Регистрация: 06.02.2018
Сообщений: 5
07.02.2018, 10:50  [ТС]
Большое спасибо! всё работает, не думаю, конечно, что я до конца осознал как, магия. но направление я понял. спасибо ещё раз
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
07.02.2018, 11:11
manibashkas, говори, что контактно на понятно, поясню.
0
3 / 3 / 1
Регистрация: 06.02.2018
Сообщений: 5
07.02.2018, 15:24  [ТС]
поток останавливается, когда полностью отработает? т.е., к примеру, запускаем приложение, в отдельном потоке в этом приложении запускается бесконечный цикл. мы закрываем ГУИ, т.е. завершаем этот процесс. а поток продолжает работу? Честно говоря, я думал, что потоки существуют в самом процессе и с его завершением прекращают работу. и ещё, в приведённом примере, "# При нажатии на кнопку запускаем обработку данных",
Python
1
my_signal = QtCore.pyqtSignal(list, name='my_signal')
что это за сигнал? Простите за невежественность заранее.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
07.02.2018, 22:29
Цитата Сообщение от manibashkas Посмотреть сообщение
my_signal = QtCore.pyqtSignal(list, name='my_signal')
Это создание своего собственного сигнала, через который можно предавать списки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2018, 22:29
Помогаю со студенческими работами здесь

PyQt5
Здравствуйте, столкнулся c проблемой, просьба помочь. Делаю программу с использованием библиотеки PyQt5, в которой открывается окно и после...

Pyqt5
Напишите программу с хорошо разработанным, разработанным и протестированным графическим интерфейсом, который может обрабатывать и...

Pyqt5
Здравствуйте! Вопрос следующий-Имеем изображение. На этом изображении ставим точку. В зависимости от того, где ставим точку, используется...

PyQt5
Помогите пожалуйста. Как мне сделать так, чтобы при введение 3 сторон, информация с 3 полей считывались из полей и высчитывался периметр...

PyQt5, функционал
Нужно чтобы из 3 полей(сторона1, строна2, сторона3) брались числа, используя их, нужно найти площадь треугольника и вписать результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru