Форум сайта python.su
Ткните носом как правильно должно выглядеть.
Есть файлы скриптов с логикой
Есть файл с гуем
logika.py - файл логики
class Setting()
class Worker()
fun(set)
from logika import Setting, Worker
class windows()
setting = Setting()
worker = Worker ()
# Далее строим гуи, на основе показателей setting
# Делаем конекшены и обработчики и запускаем главное событие
worker.fun(setting)
Офлайн
Можно сделать склеивающий класс, который будет ловить сигналы от гуи и выполнять действия в логике.
п.с. вроде бы он называется Controller в той самой системе.
Отредактировано (Дек. 25, 2009 05:42:34)
Офлайн
ну да, тут либо Worker надо делать потомком QObject, либо “обернуть” его в QObject, который и будет с одной стороны передавать “работу” в класс или объект класса Worker (это зависит от реализации обертки: либо наследование, либо композиция), а с другой рассылать при этом сигналы в GUI.
Офлайн
МитричНе совсем понял как обернуть Worker?
ну да, тут либо Worker надо делать потомком QObject, либо “обернуть” его в QObject, который и будет с одной стороны передавать “работу” в класс или объект класса Worker (это зависит от реализации обертки: либо наследование, либо композиция), а с другой рассылать при этом сигналы в GUI.
Офлайн
можно сделать примерно так: класс QWorker инициализируется объектом класса Worker, для всех методов интерфейса класса Worker (только если они открыты) пишутся соответствующие методы класса QWorker.
def qMethod(self,*args):
# здесь разослать предварительные сигналы (если надо)
self.worker.method(*args)
# здесь разослать сигналы о завершении (если надо)
def method(self,*args):
# здесь разослать предварительные сигналы (если надо)
self.signaller.preSignal.emit()
super().method(*args)
# здесь разослать сигналы о завершении (если надо)
self.signaller.postSignal.emit()
Отредактировано (Дек. 27, 2009 15:31:28)
Офлайн
Вот еще ссыль для понимания, может кому пригодится
http://python.su/forum/viewtopic.php?id=1493
Отредактировано (Янв. 10, 2010 20:03:01)
Офлайн
В продолжение темы.. не могу понять как правильно реализовать работу с потоками…
Есть 4 файла
Превый nastroiki.py - лежит класс всякого рода переменных, для гуи и логики.
class nastroi():
def __init__(self, parent):
self.parent = parent
self.maxcount = 10
self.curcount = 0
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)
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)))
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_())
Отредактировано (Янв. 10, 2010 20:16:39)
Офлайн
Оперируйте Queue
Офлайн
truporezЧто конкретно очередью делать надо?
Оперируйте Queue
Отредактировано (Янв. 10, 2010 22:43:19)
Офлайн
Работать с гуей может только поток ее создавший.
Офлайн