PyQt-Python应用程序中的后台计时器
我正在使用PyQt4用python构建一个应用程序。我想在我的应用程序中添加一个后台计时器,这样当计时器用完时,我的应用程序中的文本编辑器将停止接收输入并冻结。 到目前为止,我已经尝试了以下方法:PyQt-Python应用程序中的后台计时器,python,timer,pyqt4,Python,Timer,Pyqt4,我正在使用PyQt4用python构建一个应用程序。我想在我的应用程序中添加一个后台计时器,这样当计时器用完时,我的应用程序中的文本编辑器将停止接收输入并冻结。 到目前为止,我已经尝试了以下方法: def main(): app = QtGui.QApplication(sys.argv) main = Main() main.show() start = time.time() #this loop is for the time interval
def main():
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
start = time.time()
#this loop is for the time interval within which the text area of
#the editor will accept inputs.
while time.time() - start < 120:
pass
#this will set the text area to a read only state after and will not
#any more inputs.
main.text.setReadOnly(True)
sys.exit(app.exec_())
这是主类代码的淡化版本。希望这有帮助。您的应用程序没有响应,因为您正在阻止事件处理程序。它由app.exec()处理。。此调用仅检查事件并在无限循环中处理这些事件 将QTimer与信号和插槽一起使用 有关在pyqt中使用信号和插槽的信息,请参阅 定时器通过持续时间和信号插槽连接进行初始化。调用
app.exec()
后,它将等待input\u计时器
信号超时
。如果引发此问题,事件循环将调用lambda函数,该函数将禁用文本框,因为它连接到信号
def main():
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
input_timer = QTimer(self)
input_timer.timeout.connect(lambda : main.text.setReadOnly(True))
input_timer.setSingleShot(True)
input_timer.start(2000)
sys.exit(app.exec_())
这将在2000毫秒后禁用文本框。根据需要进行调整。我会将计时器和行为移至Main
类
import sys
from PyQt4 import QtCore, QtGui
class Main(QtGui.QMainWindow):
def __init__(self,parent = None):
QtGui.QMainWindow.__init__(self,parent)
self.init_ui()
self.disable_edit_text_timer = QtCore.QTimer(self)
self.disable_edit_text_timer.timeout.connect(self.disable_edit_text)
self.disable_edit_text_timer.setSingleShot(True)
self.disable_edit_text_timer.start(2000)
def init_ui(self):
self.text = QtGui.QTextEdit(self)
self.setCentralWidget(self.text)
self.statusbar = self.statusBar()
self.setGeometry(100,100,1080,720)
self.setWindowTitle("Text Editor")
def disable_edit_text(self):
self.text.setReadOnly(True)
def main():
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
它不起作用。我在您编辑后再次尝试,但应用程序仍然崩溃。请发布您的
class Main
代码。
import sys
from PyQt4 import QtCore, QtGui
class Main(QtGui.QMainWindow):
def __init__(self,parent = None):
QtGui.QMainWindow.__init__(self,parent)
self.init_ui()
self.disable_edit_text_timer = QtCore.QTimer(self)
self.disable_edit_text_timer.timeout.connect(self.disable_edit_text)
self.disable_edit_text_timer.setSingleShot(True)
self.disable_edit_text_timer.start(2000)
def init_ui(self):
self.text = QtGui.QTextEdit(self)
self.setCentralWidget(self.text)
self.statusbar = self.statusBar()
self.setGeometry(100,100,1080,720)
self.setWindowTitle("Text Editor")
def disable_edit_text(self):
self.text.setReadOnly(True)
def main():
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()