Cam*_*ina 3 python qt sleep pyqt python-3.x
我有这个问题.我试图在pyqt4上的lineEdit对象上设置文本,然后等待几秒钟并更改相同lineEdit的文本.为此,我使用time.sleep()python Time模块上给出的函数.但我的问题是,不是设置文本,然后等待并最终重写lineEdit上的文本,它只是等待它应该睡觉的时间,只显示最终文本.我的代码如下:
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_())
Run Code Online (Sandbox Code Playgroud)
你不能time.sleep在这里使用因为冻结了GUI线程,所以在这段时间内GUI将被完全冻结.
您应该使用a QTimer并使用它的timeout信号来安排延迟交付的信号,或者它的singleShot方法.
例如(调整代码使其无依赖性运行):
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_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |