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")
self.instance = vlc.Instance()
self.player = self.instance.media_player_new()
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":
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()