Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как заставит PyQt4 программу подождать? [RSS Feed]

#1 Ноя. 23, 2008 02:20:51

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

если в какой-то функции исполняемой в классе интерфэйса PyQt4 поставить time.sleep или threading.Event().wait(timeout=20) - то она на єто время виснет… как заставить интєрфейс просто подождать?



Офлайн

#2 Ноя. 23, 2008 07:47:27

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

Можно так(как вариант):

import sys
from PyQt4 import QtCore,QtGui

app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("GUI")

print "wait 5 seconds"
QtCore.QProcess.execute(QtCore.QString("/bin/sleep 5"))
print "5 seconds passed"

label.show()
sys.exit(app.exec_())



Офлайн

#3 Ноя. 23, 2008 08:12:59

SvartalF
От:
Зарегистрирован: 2008-06-29
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

gmorgunov, весьма портабельно ;)



Офлайн

#4 Ноя. 23, 2008 09:59:00

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

Не, так нельзя:( В интерфейсе Qt всё происходит асинхронно конечно, всё обрабатывается в event loop - app.exec_(). Если где-то интерпретатор зависнет, то и весь event loop зависнет:( Единственный способ - это выполнять все операции ввода-вывода асинхронно или иметь возможность часто делать запрос о готовности, а если это какие-то вычисления, то втиснуть в них QApplication.processEvents(). Всё зависит от того, чем вызвана эта задержка, от этого зависит решение. Если нужно просто подождать, то сгодится и такое:

for i in xrange(200):
time.sleep(0.05)
QApplication.processEvents()



Офлайн

#5 Ноя. 23, 2008 11:54:50

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

я не очень понимаю… обьясните пожалуйста, что делает QApplication.processEvents() ?



Офлайн

#6 Ноя. 23, 2008 14:33:47

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

124bit
я не очень понимаю… обьясните пожалуйста, что делает QApplication.processEvents() ?
дает исполнится нескольким событиям в очереди (event loop)
у Qt4 очень хорошая документация, грех ее не читать



Отредактировано (Ноя. 23, 2008 14:38:43)

Офлайн

#7 Ноя. 24, 2008 08:14:53

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

import sys
from PyQt4 import QtCore,QtGui

app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("GUI")

print "wait 10 seconds"
QtCore.QThread.msleep(10000)
print "10 seconds passed"

label.show()
sys.exit(app.exec_())



Отредактировано (Ноя. 24, 2008 08:15:08)

Офлайн

#8 Ноя. 24, 2008 11:04:53

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

ice, gmorgunov А так получится?!

import sys
from PyQt4 import QtCore, QtGui

def wait():
print "wait 10 seconds and FREEZE!!!"
QtCore.QThread.msleep(10000)
print "10 seconds passed"

app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("GUI")
label.show()

# launch test after 3 seconds, when event loop is already running
timer = QtCore.QTimer.singleShot(3000, wait)

app.exec_()



Отредактировано (Ноя. 24, 2008 11:05:46)

Офлайн

#9 Ноя. 24, 2008 12:12:31

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

Нет. Зависнет (не проверял, но думаю так и будет) Поток то один.
Если нужно чтоб событие через определенное время произошло и 1 поток всего, то не проще таймер повесить?



Офлайн

#10 Ноя. 24, 2008 13:45:49

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставит PyQt4 программу подождать?

Проверил.Виснуть - не виснет, но работает так:
- сразу появляется окно гуя.
- через 3 сек. - wait 10 seconds and FREEZE !!!
- через 10 сек. - 10 seconds passed.



Офлайн

  • Начало
  • » GUI
  • » Как заставит PyQt4 программу подождать?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version