python语言vlc视频播放器程序代码

import tkinter as tk
from tkinter import filedialog, messagebox
import vlc
import os


class VideoPlayer:
    def __init__(self, window):
        self.window = window
        self.window.title("视频播放器")
        self.window.geometry("800x600")

        # 创建VLC实例和媒体播放器
        self.instance = vlc.Instance()
        self.player = self.instance.media_player_new()

        # 创建UI组件
        self.create_widgets()

        # 当前视频路径
        self.current_path = None

    def create_widgets(self):
        # 视频显示区域
        self.video_frame = tk.Frame(self.window, bg="black")
        self.video_frame.pack(fill=tk.BOTH, expand=True)

        # 控制按钮区域
        self.control_frame = tk.Frame(self.window)
        self.control_frame.pack(fill=tk.X, padx=10, pady=10)

        # 打开文件按钮
        self.open_button = tk.Button(self.control_frame, text="打开", command=self.open_file)
        self.open_button.pack(side=tk.LEFT, padx=5)

        # 播放按钮
        self.play_button = tk.Button(self.control_frame, text="播放", command=self.play, state=tk.DISABLED)
        self.play_button.pack(side=tk.LEFT, padx=5)

        # 暂停按钮
        self.pause_button = tk.Button(self.control_frame, text="暂停", command=self.pause, state=tk.DISABLED)
        self.pause_button.pack(side=tk.LEFT, padx=5)

        # 停止按钮
        self.stop_button = tk.Button(self.control_frame, text="停止", command=self.stop, state=tk.DISABLED)
        self.stop_button.pack(side=tk.LEFT, padx=5)

        # 音量控制
        self.volume_scale = tk.Scale(self.control_frame, from_=0, to=100, orient=tk.HORIZONTAL,
                                     length=150, label="音量", command=self.set_volume)
        self.volume_scale.set(100)  # 默认音量最大
        self.volume_scale.pack(side=tk.RIGHT, padx=5)

        # 绑定窗口调整大小事件
        self.window.bind("<Configure>", self.on_resize)

    def open_file(self):
        file_path = filedialog.askopenfilename(
            title="选择视频文件",
            filetypes=[("视频文件", "*.mp4;*.mkv;*.avi;*.mov;*.flv;*.wmv")]
        )

        if file_path:
            self.current_path = file_path
            self.load_video()
            self.play_button.config(state=tk.NORMAL)
            self.pause_button.config(state=tk.NORMAL)
            self.stop_button.config(state=tk.NORMAL)

    def load_video(self):
        if not self.current_path:
            return

        # 停止当前播放
        self.player.stop()

        # 创建新的媒体
        self.media = self.instance.media_new(self.current_path)
        self.player.set_media(self.media)

        # 设置窗口标题为视频文件名
        self.window.title(f"视频播放器 - {os.path.basename(self.current_path)}")

        # 设置窗口句柄
        if hasattr(self.video_frame, 'winfo_id'):
            window_id = self.video_frame.winfo_id()
            if window_id:
                # 根据操作系统设置窗口句柄
                import platform
                if platform.system() == "Windows":
                    self.player.set_hwnd(window_id)
                elif platform.system() == "Linux":
                    self.player.set_xwindow(window_id)
                elif platform.system() == "Darwin":  # macOS
                    self.player.set_nsobject(window_id)

    def play(self):
        if self.current_path:
            self.player.play()
            self.play_button.config(state=tk.DISABLED)
            self.pause_button.config(state=tk.NORMAL)

    def pause(self):
        if self.player.is_playing():
            self.player.pause()
            self.play_button.config(state=tk.NORMAL)
            self.pause_button.config(state=tk.DISABLED)

    def stop(self):
        if self.current_path:
            self.player.stop()
            self.play_button.config(state=tk.NORMAL)
            self.pause_button.config(state=tk.DISABLED)

    def set_volume(self, volume):
        self.player.audio_set_volume(int(volume))

    def on_resize(self, event):
        # 窗口大小改变时的处理
        pass


if __name__ == "__main__":
    root = tk.Tk()
    app = VideoPlayer(root)
    root.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EYYLTV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值