【问题标题】:Passing a parameter to QTimer timeout signal?将参数传递给 QTimer 超时信号?
【发布时间】:2012-11-02 19:44:50
【问题描述】:

我正在使用 Python 和 PySide(PyQt 替代方案)。我有一个在后台运行的应用程序,我想使用 QTimer 来安排一些要执行的任务。

但是,我需要 QTimer 来调用我的程序中的一个方法,但是这个方法需要“初始化参数”来指定方法应该做什么。

我认为我需要继承 QTimer 并覆盖 timeoutstart 方法是否正确?如果是这样,那是哪一个,我将如何处理?我几乎没有覆盖现有方法的经验,而且谷歌搜索也没有得到很多结果(有一些我不明白的 C++ )。我已经设法做了一些事情(例如,我覆盖了 start() 方法,但是原始 start 方法的代码没有执行(可以理解),我不知道该代码应该是什么。

或者有其他方法吗?

【问题讨论】:

    标签: python qt pyqt scheduled-tasks


    【解决方案1】:

    但是,我需要 QTimer 来调用我的程序中的一个方法,但是这个方法需要“初始化参数”来指定方法应该做什么。

    初始化参数有变化吗?我可能会做一些涉及functools.partial 的事情来绑定一些参数,所以如果你有这个

    import functools
    from PySide.QtCore import QTimer
    
    def onTimer(initParams):
        # use initParams
        # your code here...
    
    myInitParams = "Init!"
    timerCallback = functools.partial(onTimer, initParams=myInitParams)
    myTimer = QTimer()
    myTimer.timeout.connect(timerCallback)
    myTimer.start( 1000) #once a sec
    
    #Your QApplication goes below...
    

    如果您想根据应用程序的某些当前条件提供不同的 init 参数,您最好根据特定项目的更改时间使用自定义信号/槽。或者保持我在其他地方修改 initParams 的“当前”状态。

    【讨论】:

    • 谢谢!你让我跳出框框思考,我一直试图通过 QTimer 传递参数,我没有想到非 Qt 方式。但是,如果我错了,请纠正我,但我相信您的代码有错误 - 不应该是functools.partial(onTimer, myInitParams)吗?
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多