2013-05-28 4 views
3

이 문제가 있습니다. pyqt4의 lineEdit 객체에 텍스트를 설정하고 몇 초 동안 기다렸다가 같은 lineEdit의 텍스트를 변경하려고합니다. 이것을 위해 나는 파이썬 시간 모듈에 주어진 time.sleep() 함수를 사용하고있다. 하지만 내 문제는 텍스트를 설정하는 대신 대기하고 마지막으로 lineEdit의 텍스트를 다시 쓰는 대신 잠자기 시간을 기다리고 마지막 텍스트 만 표시한다는 것입니다. 즉, GUI 스레드를 정지하기 때문에 GUI는이 기간 동안 완전히 동결 될 것입니다, 그래서 당신은 여기 time.sleep을 사용할 수 없습니다pyqt4에서 수면이 작동하지 않습니다.

from PyQt4 import QtGui 
from gui import * 

class Ventana(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.button.clicked.connect(self.testSleep) 

    def testSleep(self): 
     import time 
     self.lineEdit.setText('Start') 
     time.sleep(2) 
     self.lineEdit.setText('Stop')   

    def mainLoop(self, app): 
     sys.exit(app.exec_()) 

if __name__ == '__main__': 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Ventana() 
    window.show() 
    sys.exit(app.exec_()) 

답변

6

다음과 같이 내 코드입니다.

지연 배달을위한 신호를 예약하려면 QTimer 신호를 사용하고 timeout 신호를 사용하거나 singleShot 메서드를 사용해야합니다. 예를 들어

(이 의존성없이 실행할 수 있도록 코드 적용) : 즉, GUI 스레드를 정지하기 때문에 여기 time.sleep 사용할 수 없습니다

from PyQt4 import QtGui, QtCore 

class Ventana(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.setLayout(QtGui.QVBoxLayout()) 
     self.lineEdit = QtGui.QLineEdit(self) 
     self.button = QtGui.QPushButton('clickme', self) 
     self.layout().addWidget(self.lineEdit) 
     self.layout().addWidget(self.button) 
     self.button.clicked.connect(self.testSleep) 

    def testSleep(self): 
     self.lineEdit.setText('Start') 
     QtCore.QTimer.singleShot(2000, lambda: self.lineEdit.setText('End')) 

    def mainLoop(self, app): 
     sys.exit(app.exec_()) 

if __name__ == '__main__': 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Ventana() 
    window.show() 
    sys.exit(app.exec_()) 
-1

, 그래서 GUI는이 기간 동안 완전히 동결 될 것입니다 time.sleep() 대신 QtTest 모듈을 사용할 수 있습니다.

from PyQt4 import QtGui,QtTest 
from gui import * 

class Ventana(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.button.clicked.connect(self.testSleep) 

    def testSleep(self): 
     import time 
     self.lineEdit.setText('Start') 
     QtTest.QTest.qWait(2000) 
     self.lineEdit.setText('Stop')   

    def mainLoop(self, app): 
     sys.exit(app.exec_()) 

if __name__ == '__main__': 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Ventana() 
    window.show() 
    sys.exit(app.exec_()) 
+0

@eyllanesc :

from PyQt4 import QtTest QtTest.QTest.qWait(msecs) 

그래서 코드가 같아야합니다 아무것도이 코드에서 잘못되면 당신이 말해 주 시겠어요. – PAR

관련 문제