用户界面-在python上执行x秒的功能



我是python编程的新手。我正在尝试开发一个运行在Raspy3上的软件。问题是,我想要一个按钮在x秒内执行一个功能(在这种情况下是10)。我试着使用QTimer.singleshot,使用Lambda,但它冻结了我的电脑,windows控制台显示如下内容:QEventDispatcherWin32::registertime: Failed to create a timer - the process has used the maximun number of handlers allowed by the system(西班牙语翻译)这是程序的代码:

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtCore import (QTime)
from PyQt4.QtCore import pyqtSignal as Signal
from PyQt4.QtGui import *
import ui_1

class Ventana(QMainWindow, ui_1.Ui_Ventana):
    def __init__(self, parent=None):
        super(Ventana, self).__init__(parent)
        self.setupUi(self)
        self.showMaximized()
        self.botonBlanco.clicked.connect(self.blanco)       
        self.sliderBlanco.valueChanged.connect(self.sliderC)
        self.labelBlanco.setText("Toma muestra durante 60 segundos para setear el blanco")
        blancoA = False
    def blanco(self):
        cr = 0
        while cr != 10:
            QTimer.singleShot(1000, lambda: crono(cr))
    def crono(self, cr):
        cr += 1
        return cr
    def sliderC(self):
        tiempoBlanco = self.sliderBlanco.value()
        self.labelBlanco.setText("Toma muestra durante %i segundos para setear el blanco" % tiempoBlanco)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Ventana()
    form.show()
    app.exec_()

我使用的是Python 2.7.11和PyQt 4 GUI我不知道该怎么修。如果能帮忙,我将不胜感激。提前感谢

在函数blanco中,cr从不递增。从crono函数返回的值没有分配到任何位置。我从未使用过PyQt(只有Qt4 C++),但你可以试试这个(我不知道你的滑块在做什么,所以对不起,我要忽略它们:):

添加您的__init__ this:

self.cr = 0

似乎你的blanco功能启动了计时器,像这样更改:

def blanco(self):
    if self.cr > 10:
        # don't start the sec counter if 10s passed
        self.cr = 0
    else:
        QTimer.singleShot(1000, self.crono)

您需要每秒调用blanco来重置计时器,还需要在调用crono后每秒执行想要执行的操作。所以,在crono:中做这两件事

def crono(self):
    self.cr = self.cr + 1
    self.labelBlanco.setText("Total of %i seconds passed." % tiempoBlanco)
    self.blanco()

这应该会在按下botonBlanco后的10秒内每秒更改标签Blanco。检查这是否有效,并根据您的需要进行修改。

如果没有ui_1模块,我就无法进一步调试它,但这可能会解决您正在遇到的错误,或者在解决当前问题后会出现的错误。。

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtCore import (QTime)
from PyQt4.QtCore import pyqtSignal as Signal
from PyQt4.QtGui import *
import ui_1

class Ventana(QMainWindow, ui_1.Ui_Ventana):
    def __init__(self, parent=None):
        super(Ventana, self).__init__(parent)
        self.setupUi(self)
        self.showMaximized()
        self.botonBlanco.clicked.connect(self.blanco)       
        self.sliderBlanco.valueChanged.connect(self.sliderC)
        self.labelBlanco.setText("Toma muestra durante 60 segundos para setear el blanco")
        blancoA = False
    def blanco(self):
        self.cr = 0
        while self.cr != 10:
            QTimer.singleShot(1000, self.crono)
    def crono(self):
        self.cr += 1
    def sliderC(self):
        tiempoBlanco = self.sliderBlanco.value()
        self.labelBlanco.setText("Toma muestra durante %i segundos para setear el blanco" % tiempoBlanco)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Ventana()
    form.show()
    app.exec_()

注意Qtimer调用中对self.crono的更改,以及将cr变量的实例更改为对象属性:self.cr

相关内容

  • 没有找到相关文章

最新更新