Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2016 21:37:48

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

Процессы в PyQt4

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

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_())  



Отредактировано OzXaker (Фев. 4, 2016 14:05:17)

Офлайн

#2 Фев. 4, 2016 04:33:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Процессы в PyQt4

Вы за пять лет участия в форуме не научились код оформлять?



Офлайн

#3 Фев. 4, 2016 09:34:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Процессы в PyQt4

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

Нужно использовать потоки, а не QtGui.qApp.processEvents



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Фев. 4, 2016 09:39:37

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

Процессы в PyQt4

FishHook я здесь 100 лет не был



Офлайн

#5 Фев. 4, 2016 14:03:48

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

Процессы в PyQt4

Rodegast А если можно пример с QtGui.qApp.processEvents на моем коде приведите
————————————————————
Я в приципе нашол выход с использованием класса 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(3)
            self.emit(QtCore.SIGNAL("mysignal(QString)"), "i = %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.button=QtGui.QPushButton("Запустить процесс")
        self.vbox=QtGui.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.button)
        self.setLayout(self.vbox)
        self.thread=MyThread()
        self.connect(self.button, QtCore.SIGNAL("clicked()"),
         self.on_clicked)
        self.connect(self.thread, QtCore.SIGNAL("started()"),
         self.on_started)
        self.connect(self.thread, QtCore.SIGNAL("finished()"),
         self.on_finished)
        self.connect(self.thread, QtCore.SIGNAL("mysignal(QString)"),
         self.on_change, QtCore.Qt.QueuedConnection)
    def on_clicked(self):
        self.button.setDisabled(True)
        self.thread.start()
    def on_started(self):
        self.label.setText("Вызван метод on_started()")
    def on_finished(self):
        self.label.setText("Вызван метод on_finished()")
        self.button.setDisabled(False)
    def on_change(self, s):
        self.label.setText(s)
if __name__ == "__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.setWindowTitle("Использование класса QThread")
    window.resize(300, 70)
    window.show()
    sys.exit(app.exec_())



Офлайн

#6 Фев. 4, 2016 14:14:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Процессы в PyQt4

> А если можно пример с QtGui.qApp.processEvents на моем коде приведите

Я как раз и имел в виду что тебе нужен не processEvents, а QThread. В примере “mysignal(QString)” лучше замениьт на “mysignal(PyObject)”.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Фев. 5, 2016 08:27:26

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

Процессы в PyQt4

Rodegast > а QThread. В примере “mysignal(QString)” лучше замениьт на “mysignal(PyObject)”.
Заменил что то не работает ваш вариант у меня ….



Офлайн

#8 Фев. 5, 2016 09:50:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Процессы в PyQt4

Код в студию!



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Фев. 5, 2016 10:08:43

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

Процессы в PyQt4

Rodegast На тебе старый исправь пожалуйста … у меня нет доступа к моему компу до вечера

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(3)
            self.emit(QtCore.SIGNAL("mysignal(QString)"), "i = %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.button=QtGui.QPushButton("Запустить процесс")
        self.vbox=QtGui.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.button)
        self.setLayout(self.vbox)
        self.thread=MyThread()
        self.connect(self.button, QtCore.SIGNAL("clicked()"),
         self.on_clicked)
        self.connect(self.thread, QtCore.SIGNAL("started()"),
         self.on_started)
        self.connect(self.thread, QtCore.SIGNAL("finished()"),
         self.on_finished)
        self.connect(self.thread, QtCore.SIGNAL("mysignal(QString)"),
         self.on_change, QtCore.Qt.QueuedConnection)
    def on_clicked(self):
        self.button.setDisabled(True)
        self.thread.start()
    def on_started(self):
        self.label.setText("Вызван метод on_started()")
    def on_finished(self):
        self.label.setText("Вызван метод on_finished()")
        self.button.setDisabled(False)
    def on_change(self, s):
        self.label.setText(s)
if __name__ == "__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.setWindowTitle("Использование класса QThread")
    window.resize(300, 70)
    window.show()
    sys.exit(app.exec_())



Офлайн

#10 Фев. 5, 2016 10:42:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Процессы в PyQt4

Всё разобрался. Это для PySide-а нужен PyObject, а для PyQt должен быть PyQt_PyObject. Просто я в основном PySide использую по этому и напутал.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version