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
)。
您还应该避免将 QBasicTimer
与 timerEvent
一起使用,而是将 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):
...
我在这一行中遇到错误: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
)。
您还应该避免将 QBasicTimer
与 timerEvent
一起使用,而是将 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):
...