【问题标题】:using qt with custom loop in python在python中使用带有自定义循环的qt
【发布时间】:2015-05-04 23:55:15
【问题描述】:

我一直在尝试在 python3 中使用 QT,并想出了如何制作一个简单的 .ui 文件并将其直接导入 python 程序。但是,我必须使用 python QT 应用程序,而我想拥有自己的自定义循环以便能够向其中添加内容。所以我现在拥有的是:

import sys
from PyQt4 import QtCore, QtGui, uic

class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.desktop = uic.loadUi('mytest.ui')
        self.desktop.show()

if __name__ == '__main__':
    app = QtGui.QApplication.instance()
    window = MyWindow()
    sys.exit(app.exec_())

我已经在 PGU 上玩了一些,我已经能够做到这一点

while True:
    window.loop()

在 main 中,它允许我放入我自己的与 GUI 无关的额外代码,而无需处理多个线程。但是,我一直无法在 qt 中找到与“循环”等效的内容,并且搜索“qt 自定义循环/更新/blit python”除了向我的应用程序添加 0 秒计时器并在那里放置额外代码的建议外,没有发现任何相关内容似乎……对我不优雅。我想将 GUI 导入我的应用程序,而不是围绕 GUI 构建我的应用程序。

编辑:这是我更新的代码,考虑了 Phyatt 的答案,以供其他人寻找与我相同的答案。

import sys
from PyQt4 import QtGui, QtCore, uic

class TestApp(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.ui = uic.loadUi('mytest.ui')
        self.ui.show()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = TestApp()
    app.processEvents()
    while True:
        app.processEvents()

【问题讨论】:

    标签: python qt user-interface python-3.x


    【解决方案1】:

    除了使用您自己的自定义循环之外,更常见的方法是在 Qt 循环上安排一个计时器事件,或者启动另一个线程。

    如果您仍然真的想使用自己的循环,则需要在循环中手动调用QApplication.processEvents(),它可能应该可以工作。

    http://qt-project.org/doc/qt-4.8/qcoreapplication.html#processEvents

    http://doc.qt.io/qt-5/qtimerevent.html#details

    MyWindow.start(100) # start the built in timer event for that QObject 10 times a second
    

    然后在MyWindow 中输入def timerEvent,它应该可以工作。

    希望对您有所帮助。

    【讨论】:

    • app.processEvents() 是我正在寻找的。我知道计时器,但出于某种原因,这对我来说似乎是错误的。感谢您的帮助。
    • 使用 timerEvent,可以让你做各种各样的事情,这就是 Qt 在其大部分处理中的底层工作方式。函数式程序员感觉不对,因为它看起来不像 for 循环。但它在制作动画、轮询系统、响应用户输入甚至安全地跨线程边界方面具有很多优势。当您感到大胆时,请尝试一下。这是一种更“Qt 方式”的实现方式,它有助于编写更简洁、错误更少的代码。
    • 你可能是对的,我觉得它并不像“pythonic”。正如我之前所说,将 GUI 导入我的程序而不是围绕 GUI 构建程序对我来说更有意义,这似乎是 QT 的做事方式。当然,由于我使用 GUI 的大多数尝试要么非常少,要么完全失败,这种思维方式无疑是我的问题的一部分,这就是我现在尝试不同 GUI 的原因。
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2021-08-01
    • 1970-01-01
    • 2019-08-22
    • 2017-03-02
    相关资源
    最近更新 更多