В продолжение темы.. не могу понять как правильно реализовать работу с потоками…
Есть 4 файла
Превый nastroiki.py - лежит класс всякого рода переменных, для гуи и логики.
class nastroi():
def __init__(self, parent):
self.parent = parent
self.maxcount = 10
self.curcount = 0
Второй kolbaser.py - клас логики где будет что-то долго и нужно обрабатываться, причем многопоточно. В данном случае просто апдейтит настройки и дергает функцию соседнего гуи класа
import time
class kolbaser():
def __init__(self, parent):
self.parent = parent
def dosomething(self):
self.parent.Setting.curcount = 0
while self.parent.Setting.curcount < self.parent.Setting.maxcount:
print self.parent.Setting.curcount
self.parent.Setting.curcount += 1
self.parent.Gui.upfdatelab()
# time.sleep(1)
Третий Gui.py - гуи. Дергает по клику функцию логики, запуская ее в потоке. Имеет функцию которую дергает логика.
import threading
from PyQt4 import QtGui, QtCore
class Gui(QtGui.QMainWindow):
def __init__(self, parent):
QtGui.QMainWindow.__init__(self)
self.parent = parent
frame = QtGui.QFrame()
self.setCentralWidget(frame)
mainLayout = QtGui.QGridLayout()
frame.setLayout(mainLayout)
self.statLabel = QtGui.QLabel(self.trUtf8('Позиция: <strong>%s</strong>' % str(self.parent.Setting.curcount)))
self.startButton = QtGui.QPushButton(self.trUtf8('Пуск'))
mainLayout.addWidget(self.statLabel, 0 , 0, 1 , 1)
mainLayout.addWidget(self.startButton, 10 , 0, 2, 2)
self.buildcon()
def buildcon(self):
self.connect(self.startButton, QtCore.SIGNAL('clicked()'), self.Pusk )
def Pusk(self):
threading.Thread(target = self.parent.Action.dosomething, name = 'kolbaser').start()
def upfdatelab(self):
self.statLabel.setText(self.trUtf8('Позиция: <strong>%s</strong>' % str(self.parent.Setting.curcount)))
Четвертый main.py - все объединяет и является папой для всех, запускает гуй.
import sys
from PyQt4 import QtGui, QtCore
from nastroiki import nastroi
from kolbaser import kolbaser
from gui import Gui
class MainStarter():
def __init__(self):
self.Setting = nastroi(self)
self.Action = kolbaser(self)
self.Gui = Gui(self)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = MainStarter()
main.Gui.show()
sys.exit(app.exec_())
Вопрос.. если выставить в логике слипы и если maxcount маленькое число, то все вроде работает.
Но если сделать maxcount хотя бы в 10000, а слип убрать то все валится.
Как правильно организовать такую работу. Т.е. класс kolbaser будет что-то считать много поточно и писать изменения в класс настроек. Как апдейтить gui на основе новых данных..
Большое спасибо всем за терпение и помощь.