我正在尝试使用Pyqt时间线进行基于帧的方法。我想让它运行每一帧,无论发生什么,即使我添加了时间。睡眠1秒。如果framechangeup函数/方法有很多事情要做,它就会开始跳过帧
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time
class mainWin(QDialog):
def __init__(self, parent=None):
super(mainWin, self).__init__(parent)
ffr = 1
lfr = 1440
self.frameRate = 25
self.timeLength = ((lfr + 1 - ffr) / self.frameRate) * 1000
print(self.timeLength)
self.tl = QTimeLine(self.timeLength)
self.tl.setFrameRange(ffr, lfr)
self.tl.setEasingCurve(QEasingCurve.Linear)
self.tl.loopCount = 0
self.tl.frameChanged.connect(self.framechangeup)
self.center()
self.winWidgets()
def framechangeup(self):
self.tl.setPaused(True)
print(self.tl.currentFrame())
self.cfr = self.tl.currentFrame()
self.curF.setText(str(self.cfr))
time.sleep(0.3)
self.tl.resume()
def winWidgets(self):
hbox = QHBoxLayout()
# hbox.addStretch(1)
playBut = QPushButton("play", self)
playBut.setToolTip("This is a <b>QPushButton</b> widget")
playBut.resize(playBut.sizeHint())
stpBut = QPushButton("stop", self)
stpBut.setToolTip("This is a <b>QPushButton</b> widget")
stpBut.resize(stpBut.sizeHint())
hbox.addWidget(playBut)
playBut.clicked.connect(self.playbut)
hbox.addWidget(stpBut)
stpBut.clicked.connect(self.stpbut)
vbox = QVBoxLayout()
cfr = 1
editsbox = QHBoxLayout()
cfLable = QLabel("cur Frame")
self.curF = QLineEdit()
self.curF.setReadOnly(True)
self.curF.setText(str(cfr))
lastF = QLineEdit()
editsbox.addWidget(cfLable)
editsbox.addWidget(self.curF)
vbox.addLayout(editsbox)
vbox.addLayout(hbox)
self.setLayout(vbox)
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def playbut(self):
self.tl.start()
def stpbut(self):
self.tl.stop()
print("stp")
if __name__ == "__main__":
app = QApplication(sys.argv)
exe = mainWin()
exe.show()
sys.exit(app.exec_())
即使我尝试在没有Qtimeline的情况下完成它,我似乎也需要使用线程
目前没有回答
相关问题 更多 >
编程相关推荐