class Example(QWidget):
def init(self):
super().init()
self.initUI(cur_sec_f)
def initUI(self,cur_sec_f):
self.setGeometry(120, 750, 1280, 5)
self.setWindowTitle('Signal and slot')
self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
lcd = QLCDNumber(self)
sld = QSlider(Qt.Orientation.Horizontal, self)
sld.setRange(0, int(time_f))
vbox = QHBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
sld.valueChanged.connect(lcd.display)
while cur_sec_f < time_f:
# cur_sec_f和time_f是全局变量,是ffmpeg播放视频获取的的视频当前秒数和总秒数,cur_sec_f会随视频播放实时变化
sld.setValue(int(cur_sec_f))
self.show()
time.sleep(1)
def jdt():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
i=0
while i<10:
i+=1
sld.setValue(i)
self.show()
time.sleep(1)
在Example
类里添加一个QTimber
类型的成员变量timber
,在Example
类添加一个slot
函数updateSlide()
,connect timber的timeout() singnal到updateSlide() slot。在Example构造函数里设置每隔1秒触发一次timer.start(1000)。在updateSlide()函数里增加sld相应的值。
time.sleep(1)
把主线程sleep
了。用循环更新进度条是不行的,只要循环不结束,窗口的其他消息就得不到处理,出现假死现象。
你应该使用QTimer
,没隔一段时间触发一个signal,然后在slot里更新一下进度条。
这个QTimer怎么写呢?
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!