Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QSpinBox Qt5 передача значения в питон [RSS Feed]

#1 Июль 17, 2018 22:48:55

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
Venus синдром жирафа? я ведь писал парй постов выше
понятно, извини за тугодумость, значит в сторону мультипроцессора смотреть надо

Офлайн

#2 Июль 17, 2018 22:52:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
значит в сторону мультипроцессора смотреть надо
Это вовсе необязательно, есть куча простых и не очень способов остановить поток, они уже не раз обсосаны со всех сторон на стековерфлов и подобных ресурсах.
https://stackoverflow.com/questions/18018033/how-to-stop-a-looping-thread-in-python
Весь вопрос в архитектуре.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Июль 17, 2018 22:54:24

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
Venus синдром жирафа? я ведь писал парй постов выше
и благодарю за проявленное терпение

Офлайн

#4 Июль 17, 2018 23:02:37

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
а что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?

Офлайн

#5 Июль 17, 2018 23:09:53

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
а что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?
Э-э-э вот тут я совсем потерялся, чет я совсем ничего не понял.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#6 Июль 18, 2018 22:09:21

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
вот что откопал на просторах, норм?
Чтобы упростить создание потоков-функций можно сделать заготовку:

 # Импортируем модуль threading для работы с потоками
import threading
# Отдельная функция-заготовка для вынесения 
# последующих функций в отдельный поток
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
@thread
def go(nomer):
    # В этой функции будем печатать числа от 1 до 199
    for x in range(1, 200):
        print('Поток номер '+str(nomer)+' число '+str(x)+'\n')
# Запускаем функцию три раза и получаем три потока 
go(1)
go(2)
go(3)


Мы описали функцию-заготовку для создания потока и назвали ее thread. Теперь, если мы будем писать перед любой функцией строчку @thread то эта функция станет выполняться в отдельном потоке. Это очень удобно. Всего лишь @thread над именем функции и вот она уже исполняется в новом потоке.

Отредактировано Venus (Июль 18, 2018 22:09:43)

Офлайн

#7 Июль 18, 2018 22:11:45

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
попробовал что вы показали, тестить в хвост и гриву послезавтра буду, гуи не подвисаетт!надеюсь для моего кода сойдёт

Отредактировано Venus (Июль 18, 2018 22:12:06)

Офлайн

#8 Июль 18, 2018 23:03:32

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
вот что откопал на просторах, норм?
ИМХО ты пытаешься бежат впереди паровоза, то что ты “откопал” называется декоратор.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#9 Июль 21, 2018 12:59:11

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
терь самое интересное )) а как остановить скрипт
сделал так
 from PyQt5 import QtWidgets
from threading import Thread
from samplestrorint import *
import sys
import strorint1
def log_uncaught_exceptions(ex_cls, ex, tb):
    text = '{}: {}:\n'.format(ex_cls.__name__, ex)
    import traceback
    text += ''.join(traceback.format_tb(tb))
    print(text)
    QMessageBox.critical(None, 'Error', text)
    quit()
    
sys.excepthook = log_uncaught_exceptions
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.statusBar().showMessage('Stop')
        self.ui.pushButton.clicked.connect(self.Start)
        self.ui.pushButton_2.clicked.connect(self.Stop)
        self.ui.pushButton.clicked.connect(lambda: self.statusBar().showMessage('запущен'))
        self.ui.pushButton_2.clicked.connect(lambda: self.statusBar().showMessage('остановлен'))
                
    def Start(self):
        
        strorint1.n = 1   [b]<-- добавил[/b]
        r = self.ui.textEdit.toPlainText()
        strorint1.r = int(r)
        self.sec_thread = Thread(target = strorint1.strorint)
        self.sec_thread.start()
    def Stop(self):
        strorint1.n = 0   [b]<-- добавил[/b]
        #n = self.ui.textEdit.toPlainText()
        #strorint1.n = int(r)
        strorint1.stop()
        
        
if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MainWindow()
    myapp.show()
    sys.exit(app.exec_())

и во внешнем модуле
 # -*- coding: utf-8 -*-
import time
import sys
import os
r = ('')
n = ()
def strorint():
    if n == 1:
        time.sleep(r)
        print(r, type(r))
        strorint()
    else:
        stop()
def stop():
    print("Перезапуск",r,type(r))
    time.sleep(r)

стал останавливаться но через цикл, ааа можето то что во время цикла нажал стоп он и вывел?
4 <class ‘int’> <– start
4 <class ‘int’>
Перезапуск 4 <class ‘int’> <– нажал стоп
4 <class ‘int’>
Перезапуск 4 <class ‘int’>

Отредактировано Venus (Июль 21, 2018 13:03:42)

Офлайн

#10 Июль 23, 2018 17:54:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
стал останавливаться но через цикл, ааа можето то что во время цикла нажал стоп он и вывел?
предполагаю это потому что ты нажал стоп во время цикла, в это время поток спал “time.sleep(r)”, поэтому выполнилось strorint1.stop() из ГУИ, потом поток проснулся напечатал “r, type(r)”, и вызвал рекурсивно себяже, там он увидил что n ==0, и вызвал stop() еще раз.
Во первых, ты делаешь два раза одну и туже работу, у тебя вызываеться stop() как из ГУИ так и из цикла. достаточно один раз .
Во вторых, избався наконец от рекурсии, я так понимаю она тебе нафик не нужна.

В третиьх, ты делаешь в ГУИ то что не нужно делать там, strorint1.n = 1 и strorint1.n = 0 там вообще ненужно, это нужно вынести в strorint1, както так:
  # -*- coding: utf-8 -*-
import time
r = ''
flag = True
def strorint():
    while flag:
        print(r, type(r))
        time.sleep(r)
def start():
    global flag
    flag = True
    strorint()
def stop():
    global flag
    flag = False
    print("Перезапуск",r,type(r))
    time.sleep(r)
и соотвевенно в ГУИ
 ....
    def Start(self):
        r = self.ui.textEdit.toPlainText()
        strorint1.r = int(r)
        sec_thread = Thread(target = strorint1.start)
        sec_thread.start()
    def Stop(self):
        strorint1.stop()
...
Тут мы используем глобальные переменные. Как для обучения допустимо, но вообще не есть хорошо. Нужно или заворачивать в класс все, или передавать через специальный threading.Event()(я уже приводил пример на странице 4).




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

  • Начало
  • » GUI
  • » QSpinBox Qt5 передача значения в питон[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version