Форум сайта python.su
0
как сделать так что бы процессы шли независимо друг от друга , а не заглушал один другого
———————————————————————–
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)
Офлайн
568
Вы за пять лет участия в форуме не научились код оформлять?
Офлайн
186
> как сделать так что бы процессы шли независимо друг от друга , а не заглушал один другого
Нужно использовать потоки, а не QtGui.qApp.processEvents
Офлайн
0
FishHook я здесь 100 лет не был
Офлайн
0
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_())
Офлайн
186
> А если можно пример с QtGui.qApp.processEvents на моем коде приведите
Я как раз и имел в виду что тебе нужен не processEvents, а QThread. В примере “mysignal(QString)” лучше замениьт на “mysignal(PyObject)”.
Офлайн
0
Rodegast > а QThread. В примере “mysignal(QString)” лучше замениьт на “mysignal(PyObject)”.
Заменил что то не работает ваш вариант у меня ….
Офлайн
186
Код в студию!
Офлайн
0
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_())
Офлайн
186
Всё разобрался. Это для PySide-а нужен PyObject, а для PyQt должен быть PyQt_PyObject. Просто я в основном PySide использую по этому и напутал.
Офлайн