Я новичок в 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 неправильный, извините за это Спасибо за помощь