Взятие ввода от QSLider и передача его в QThread и отправка вывода в QTextBrowser - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в qt и использую pyqt5, я использовал входы из этой (https://www.learnpyqt.com/courses/concurrent-execution/multithreading-pyqt-applications-qthreadpool/) статьи для настройки моего QThread. Мне удалось подсчитать от 0 до 100 и отобразить его на индикаторе выполнения. Теперь я могу sh взять целочисленное значение из Qslider, вычислить его число Фибоначчи в потоке и поместить его в текстовый браузер. Это мой подход:

#See how one can use the threads concept for a a simple qt widget
from PyQt5 import uic,QtWidgets
from PyQt5.QtCore import *
import time
import sys
'''
Defining our Own Thread

'''
class WorkerSignal(QObject):
    finalresult=pyqtSignal(int)
class Classicthread(QRunnable):
    def __init__(self,fn,*args,**kwargs):
        super(Classicthread,self).__init__()
        self.fn=fn
        self.args=args
        self.kwargs=kwargs
        self.signal=WorkerSignal()
        self.kwargs['general_signal']=self.signal
    @pyqtSlot()
    def run(self):
        result=self.fn(*self.args,**self.kwargs)
        self.signal.finalresult.emit(result)

'''
Making the slider responsive
'''

'''
get the value from the slider and pass it to the fibonacci function
and then print the value
'''
class sumnnumbers(QtWidgets.QMainWindow):
    def __init__(self):
        super(sumnnumbers,self).__init__()
        uic.loadUi("onlyfactorial.ui",self)
        self.threadpool=QThreadPool()
        self.slider=self.findChild(QtWidgets.QSlider,"slider_fibo")
        self.indicator=self.findChild(QtWidgets.QTextBrowser,"indicator_fibo")
        self.fibout=self.findChild(QtWidgets.QTextBrowser,"fibo_out")
        self.slider.valueChanged.connect(self.indicateval)
        self.thread=Classicthread(self.getfib)
        self.thread.signal.finalresult.connect(self.putval)
        self.threadpool.start(self.thread)
    def indicateval(self):
        sliderval=self.slider.value()
        self.indicator.setText(str(sliderval))
    def getfib(self,general_signal):
         sliderval=int(self.slider.value())
         fiboval=fibonacci(sliderval)
         general_signal.emit(fiboval)
    def putval(self,value):
        self.fibout.setText(str(value))
if __name__=="__main__":
    app=QtWidgets.QApplication(sys.argv)
    window=sumnnumbers()
    window.show()
    app.exec_()

def fibonacci(n):
    if n==1:
         return 0
    elif n==2:
        return 1
    else:
        init=0
        next=1
        for x in range(3,n+1):
            result=init+next
            init=next
            next=result
        return result

Ссылка на uifile: https://drive.google.com/file/d/1Gvru9GtsOHwX9glaJyiwoeg8b7Cn_YLY/view?usp=sharing Файл onlyfactorial.ui неправильный, извините за это Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...