QBasicTimer.start() 错误

Error in QBasicTimer.start()

我在这一行中遇到错误:self.timer.start(100, self)

错误类型为:

TypeError: QBasicTimer.start(int, QObject): argument 2 has unexpected type 'Ui_MainWindow'

我尝试将 self.timer.start(100, self) 更改为 self.timer.start(100, "Ui_MainWindow") 但它仍然显示错误。

主要代码:

import sys
from PyQt4 import QtGui
from editorFrame import Ui_MainWindow

class Editor(QtGui.QMainWindow):

    def __init__(self):
        super(Editor, self).__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Editor()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

代码编辑器框架:

from PyQt4 import QtCore, QtGui
import time
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        self.label = QtGui.QLabel(self.horizontalLayoutWidget)
        self.label.setObjectName(_fromUtf8("label"))

        self.rnd = 0
        self.segS = 0
        self.segA = 0
        self.count = 0

        self._start = 0.0
        self._elapsedtime = 0.0
        self._running = 0
        self._setTime(self._elapsedtime)
        self.timer = QBasicTimer()

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.simulacion)


    def simulacion(self):
        self._start = time.time() - self._elapsedtime
        self._running = 1
        self.timer.start(100, self)          

    def timerEvent(self, event):
        elap = time.time() - self._start
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)
        self.label.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))
        self.segS = int(elap)


    def _setTime(self, elap):
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)


    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "Practica 4", None))
        self.pushButton.setText(_translate("MainWindow", "Empezar", None))
        self.label.setText(_translate("MainWindow", "00:00:00", None))

您犯的根本错误是编辑了 pyuic 生成的文件。不要永远这样做。它是一个静态模块,旨在在运行时导入。将 所有 的程序逻辑放在主文件中。

您收到该错误的原因是因为 Ui_MainWindow 只是一个简单的命名空间 class。它仅用于将 Qt Designer 中的小部件添加到您的主要 window class(即 Editor)。

您还应该避免将 QBasicTimertimerEvent 一起使用,而是将 QTimer 与信号一起使用:

class Editor(QtGui.QMainWindow):
    def __init__(self):
        super(Editor, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        ...
        self._start = 0.0
        self._elapsedtime = 0.0
        self._running = 0
        self._setTime(self._elapsedtime)

        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.handleTimer)

        self.ui.pushButton.clicked.connect(self.simulacion)

    def simulacion(self):
        ...
        self.timer.start(100)          

    def handleTimer(self):
        elap = time.time() - self._start
        minutes = int(elap/60)
        ...

    def _setTime(self, elap):
        ...