Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процессы, Процессы и многозадачность в PyQt4 
V
    Опции темы
OzMod
  Дата 3.2.2016, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



как сделать так что бы процессы шли независимо друг от друга , а не заглушал один другого
-----------------------------------------------------------------------
Код

from PyQt4 import QtCore, QtGui

class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        (self.tm, self.pr) = time.sleep, QtGui.qApp.processEvents
        self.label = QtGui.QLabel("Процесс не запущен")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.Btn = QtGui.QPushButton('&Кнопка1 АКТИВНА') # Создаём кнотку
        self.Btn2 = QtGui.QPushButton('&Кнопка2 АКТИВНА') # Создаём кнотку
        self.vbox = QtGui.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.Btn)
        self.vbox.addWidget(self.Btn2)
        self.setLayout(self.vbox)
        self.connect(self.Btn, QtCore.SIGNAL("clicked()"), self.Tm1) # Метод обработки нажатия
        self.connect(self.Btn2, QtCore.SIGNAL("clicked()"), self.Tm2) # Метод обработки нажатия

    def Tm1(self): # Создаём функцию растягивания окна
        #self.showMaximized() # Делаем максимальный размер окна
        self.setWindowOpacity(0.9) # Задаём прозрачность окна от 0.1 до 1.0
        self.Btn.setDisabled(True)
        self.label.setText("Процесс запущенен")
        for i in range(-10,1):
            self.pr(), self.tm(1)
            self.Btn.setText("&Кнопка1 НЕ АКТИВНА: "+ (str(i)[1:]))
        self.Btn.setText("&Кнопка1 АКТИВНА")
        self.label.setText("Процесс окончен")
        self.Btn.setDisabled(False)
        self.pr(), self.tm(1)
        self.label.setText("Процесс не запущен")



    def Tm2(self): # Создаём функцию растягивания окна
        #self.showMaximized() # Делаем максимальный размер окна
        self.setWindowOpacity(0.9) # Задаём прозрачность окна от 0.1 до 1.0
        self.Btn2.setDisabled(True)
        self.label.setText("Процесс запущенен")
        for i in range(-10,1):
            self.pr(), self.tm(1)
            self.Btn2.setText("&Кнопка2 НЕ АКТИВНА: "+ (str(i)[1:]))
        self.Btn2.setText("&Кнопка2 АКТИВНА")
        self.label.setText("Процесс окончен")
        self.Btn2.setDisabled(False)
        self.pr(), self.tm(1)
        self.label.setText("Процесс не запущен")


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle("Заголовок окна")
    window.resize(300, 70)
    window.show()
    sys.exit(app.exec_()) 




Это сообщение отредактировал(а) OzMod - 5.2.2016, 20:57
PM MAIL   Вверх
OzMod
  Дата 5.2.2016, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



Всё я разобрался нашел выход с использованием класса QThread
–вот небольшой пример
Код

#-------------------------------------------------------------------------------
from PyQt4 import QtCore, QtGui

class MyThread(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)
    def run(self):
        for i in range(1, 21):
            self.sleep(1)
            self.emit(QtCore.SIGNAL("mysignal(PyQt_PyObject)"), "Кнопка НЕ АКТИВНА: %s" % i)

class MyThread2(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)
    def run(self):
        for i in range(1, 21):
            self.sleep(1)
            self.emit(QtCore.SIGNAL("mysignal(PyQt_PyObject)"), "Кнопка2 НЕ АКТИВНА: %s" % i)


class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.label = QtGui.QLabel("Процесс не запущен")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.Btn = QtGui.QPushButton('&Кнопка1 АКТИВНА') # Создаём кнотку
        self.Btn2 = QtGui.QPushButton('&Кнопка2 АКТИВНА') # Создаём кнотку
        self.vbox = QtGui.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.Btn)
        self.vbox.addWidget(self.Btn2)
        self.setLayout(self.vbox)

        self.thread=MyThread()
# Обработка событиия
        self.connect(self.Btn, QtCore.SIGNAL("clicked()"), self.Tm1) # Метод обработки нажатия
        self.connect(self.thread, QtCore.SIGNAL("started()"), self.on_started_1)
        self.connect(self.thread, QtCore.SIGNAL("finished()"), self.on_finished_1)
        self.connect(self.thread, QtCore.SIGNAL("mysignal(PyQt_PyObject)"), self.on_change_1, QtCore.Qt.QueuedConnection)

        self.thread2=MyThread2()
# Обработка События
        self.connect(self.Btn2, QtCore.SIGNAL("clicked()"), self.Tm2) # Метод обработки нажатия
        self.connect(self.thread2, QtCore.SIGNAL("started()"), self.on_started_2)
        self.connect(self.thread2, QtCore.SIGNAL("finished()"), self.on_finished_2)
        self.connect(self.thread2, QtCore.SIGNAL("mysignal(PyQt_PyObject)"), self.on_change_2, QtCore.Qt.QueuedConnection)


# Процесс Кнопка 1
    def Tm1(self):
        self.thread.start()

    def on_started_1(self):
        self.setWindowOpacity(0.9)
        self.Btn.setDisabled(True)
        self.label.setText("Процесс запущенен")

    def on_finished_1(self):
        self.Btn.setText("&Кнопка1 АКТИВНА")
        self.label.setText("Процесс окончен")
        self.Btn.setDisabled(False)

    def on_change_1(self, s):
        self.Btn.setText(s)
#---------------------------------------------------

# процесс Кнопка 2
    def Tm2(self):
        self.thread2.start()

    def on_started_2(self):
        self.setWindowOpacity(0.9)
        self.Btn2.setDisabled(True)
        self.label.setText("Процесс запущенен")

    def on_finished_2(self):
        self.Btn2.setText("&Кнопка1 АКТИВНА")
        self.label.setText("Процесс окончен")
        self.Btn2.setDisabled(False)

    def on_change_2(self, s):
        self.Btn2.setText(s)

#---------------------------------------------------


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle("Заголовок окна")
    window.resize(300, 70)
    window.show()
    sys.exit(app.exec_())

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1070 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.