x20220205 2022-02-04 23:38 采纳率: 100%
浏览 39
已结题

QSlider无法实时更新显示视频播放进度

基于Python3.10和PyQt6,视频播放采用ffmpeg。QSlider正常显示是白底窗口里面有滑块和轨道,但实际是窗口可见,看不见里面的

滑块和轨道,视频结束后QSlider一直如此,窗口标题后面显示“(未响应)”。播放总时长几秒的视频也如此。

电脑配置还可以,可以排除硬件问题,不知哪里不对,请高手指点

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())

如果把while那一部分改成下面这样,则QSlider在前9秒只显示窗口(无滑块和轨道),延迟10秒后显示滑块和轨道,且滑块已经在“10”位置

    i=0
    while i<10:
        i+=1
        sld.setValue(i)
        self.show()
        time.sleep(1)
  • 写回答

4条回答 默认 最新

  • _GX_ 2022-02-05 00:19
    关注

    Example类里添加一个QTimber类型的成员变量timber,在Example类添加一个slot函数updateSlide(),connect timber的timeout() singnal到updateSlide() slot。在Example构造函数里设置每隔1秒触发一次timer.start(1000)。在updateSlide()函数里增加sld相应的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月13日
  • 已采纳回答 2月5日
  • 创建了问题 2月4日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系