Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Связать QProgressBar и обработку в другом модуле [RSS Feed]

#1 Фев. 8, 2011 10:05:14

cormorant
От:
Зарегистрирован: 2010-12-09
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Связать QProgressBar и обработку в другом модуле

Смотрел здесь: http://python.su/forum/viewtopic.php?id=9411 в общем.
Допустим у меня такой код - простое приложение:

#!/usr/bin/env python
#coding: utf-8
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#from time import sleep
import test_another_module as tam

class AppForm(QMainWindow):
def __init__(self, parent=None):
super(AppForm, self).__init__(parent)
self.pbar = QProgressBar(self)
self.btn = QPushButton(u'OK')
# щелчок по кнопке - старт
self.connect(self.btn, SIGNAL('clicked()'), tam.process)#self.start)
self.v = QSplitter(Qt.Vertical)
self.v.addWidget(self.pbar)
self.v.addWidget(self.btn)
self.setCentralWidget(self.v)

def start(self):
size = 100000
self.pbar.setMinimum(0)
self.pbar.setMaximum(size)
for i in xrange(size+1):
self.pbar.setValue(i)
print 'finished'

if __name__ == "__main__":
app = QApplication(sys.argv)
form = AppForm()
form.show()
app.exec_()
Но если у меня обработка ведётся в трёхэтажном цикле в другом модуле (tam.process) - как мне отправлять информацию о выполнении цикла прогрессБару?
p.s. с потоками не разбирался



Офлайн

#2 Фев. 8, 2011 10:40:14

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Связать QProgressBar и обработку в другом модуле

Речь не о потоках, насколько я понимаю.

Смотрите на http://www.python.su/forum/viewtopic.php?pid=65860#p65860 и делайте выводы.



Офлайн

#3 Фев. 8, 2011 10:41:30

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Связать QProgressBar и обработку в другом модуле

Вас спасет MVP. Грубо говоря, вам нужен некий класс, который имел бы одновременно ссылку на ответственного за то, что происходит в tam.process и ссылку на виджеты (в том числе прогресс бар). Тогда можно было бы организовать передачу данных по цепочке от модели (тот самый tam.process ответственный) через представителя (некий класс, который имеет ссылку на все и всех) в представление (ваши виджеты) посредством прямых вызовов или через события.



Офлайн

  • Начало
  • » GUI
  • » Связать QProgressBar и обработку в другом модуле[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version