سيعلمك مشروع واجهة المستخدم الرسومية البسيط هذا عن ملفات الوسائط والبرمجة عبر الأنظمة الأساسية.
يمكن أن يساعدك إنشاء مشغل فيديو على الاستمتاع بمقاطع الفيديو المفضلة لديك بموضوع وأسلوب مخصصين. يمكنك جعل تشغيل الفيديو أكثر سلاسة وتصميم أزرار وقوائم التطبيق الخاص بك وإضافة أي وظائف تريدها.
سيمنحك هذا المشروع أيضًا خبرة عملية في إنشاء تطبيقات سطح المكتب عبر الأنظمة الأساسية ومعالجة الوسائط المتعددة والتعامل مع الأحداث. اكتشف كيف يمكنك إنشاء مشغل وسائط فيديو باستخدام Tkinter و VLC ووحدة التاريخ والوقت.
وحدة Tkinter و VLC و Datetime
يسمح لك Tkinter بإنشاء تطبيقات سطح المكتب. يقدم مجموعة متنوعة من الأدوات مثل الأزرار والتسميات ومربعات النص التي تسهل تطوير التطبيقات مثل تقويم واجهة المستخدم الرسومية البسيطأو آلة حاسبة أو ملف مدير قائمة المهام. لتثبيت Tkinter ، افتح Terminal وقم بتشغيل:
pip install tkinter
ال بيثون- vlc الوحدة النمطية هي رابط Python لمكتبة مشغل الوسائط VLC (VideoLAN Client). يمكنك استخدام هذه الوحدة لتنفيذ ملف ميزات VLC وبناء مشغل الوسائط المخصص الخاص بك. لتثبيت VLC ، قم بتشغيل:
pip install python-vlc
ال التاريخ والوقت تم تصميم الوحدة النمطية في Python وتوفر فئات ووظائف لتمثيل تواريخ وأوقات وفترات زمنية ومناطق مختلفة.
يمكنك العثور على الكود المصدري لهذا المشروع في ملف مستودع جيثب.
استيراد الوحدات المطلوبة. تحديد فئة ، ميديا بلاير. حدد طريقة الباني واستدعها لتهيئة نافذة التطبيق الرئيسية. عيّن العنوان والأبعاد ولون الخلفية لمشغل وسائط الفيديو. اتصل ب initialize_player طريقة.
import tkinter as tk
import vlc
from tkinter import filedialog
from datetime import timedelta
classMediaPlayerApp(tk.Tk):
def__init__(self):
super().__init__()
self.title("Media Player")
self.geometry("800x600")
self.configure(bg="#f0f0f0")
self.initialize_player()
تحديد طريقة ، initialize_player. قم بإنشاء مثيل لمشغل وسائط VLC للتفاعل مع وظائفه. باستخدام هذا المثال ، قم بإنشاء كائن مشغل وسائط يمكنك استخدامه لإدارة تشغيل الوسائط. تهيئة متغير ، الملف الحالي لتتبع الفيديو قيد التشغيل حاليًا. اضبط حالات التشغيل واستدعاء create_widgets طريقة.
definitialize_player(self):
self.instance = vlc.Instance()
self.media_player = self.instance.media_player_new()
self.current_file = None
self.playing_video = False
self.video_paused = False
self.create_widgets()
عرّف ال create_widgets طريقة. قم بإنشاء عنصر واجهة مستخدم من القماش وقم بتمرير العنصر الأصل لوضعه فيه ولون الخلفية والعرض والارتفاع. إنشاء حدد ملف زر لتحديد ملف الفيديو الذي تريد تشغيله. عيّن العنصر الأصل والنص الذي يجب أن يعرضه وأنماط الخط والأمر الذي يجب تشغيله عند النقر فوقه.
أنشئ تصنيفًا لعرض الوقت المنقضي ومدة الفيديو. عيّن العنصر الأصل والنص وأنماط الخط ولون الخط ولون الخلفية. قم بإنشاء إطار للتحكم في تشغيل الفيديو وإعطائه لون الخلفية.
defcreate_widgets(self):
self.media_canvas = tk.Canvas(self, bg="black", width=800, height=400)
self.media_canvas.pack(pady=10, fill=tk.BOTH, expand=True)
self.select_file_button = tk.Button(
self,
text="Select File",
font=("Arial", 12, "bold"),
command=self.select_file,
)
self.select_file_button.pack(pady=5)
self.time_label = tk.Label(
self,
text="00:00:00 / 00:00:00",
font=("Arial", 12, "bold"),
fg="#555555",
bg="#f0f0f0",
)
self.time_label.pack(pady=5)
self.control_buttons_frame = tk.Frame(self, bg="#f0f0f0")
self.control_buttons_frame.pack(pady=5)
عرّف ال يلعب زر يوقف زر قف زر تقديم سريع زر و الترجيع زر. إنشاء عنصر واجهة مستخدم شريط تقدم الفيديو. عيّن العنصر الأصل الذي تريد وضعه فيه ، وطريقة تحديث موضع تشغيل الفيديو ، ولون الخلفية ، والسمك.
قم بتنظيم كل هذه العناصر بحشوة مناسبة في كلا الاتجاهين.
self.play_button = tk.Button(
self.control_buttons_frame,
text="Play",
font=("Arial", 12, "bold"),
bg="#4CAF50",
fg="white",
command=self.play_video,
)
self.play_button.pack(side=tk.LEFT, padx=5, pady=5)
self.pause_button = tk.Button(
self.control_buttons_frame,
text="Pause",
font=("Arial", 12, "bold"),
bg="#FF9800",
fg="white",
command=self.pause_video,
)
self.pause_button.pack(side=tk.LEFT, padx=10, pady=5)
self.stop_button = tk.Button(
self.control_buttons_frame,
text="Stop",
font=("Arial", 12, "bold"),
bg="#F44336",
fg="white",
command=self.stop,
)
self.stop_button.pack(side=tk.LEFT, pady=5)
self.fast_forward_button = tk.Button(
self.control_buttons_frame,
text="Fast Forward",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.fast_forward,
)
self.fast_forward_button.pack(side=tk.LEFT, padx=10, pady=5)
self.rewind_button = tk.Button(
self.control_buttons_frame,
text="Rewind",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.rewind,
)
self.rewind_button.pack(side=tk.LEFT, pady=5)
self.progress_bar = VideoProgressBar(
self, self.set_video_position, bg="#e0e0e0", highlightthickness=0
)
self.progress_bar.pack(fill=tk.X, padx=10, pady=5)
تحديد طريقة ، select_file. افتح مربع حوار ملف لتحديد ملف فيديو به .mp4 أو .avi امتداد. إذا قمت بتحديد أي ملف ، فقم بتحميل مساره وقم بتحديث تسمية الوقت بمدته. ابدأ تشغيل الفيديو المحدد.
defselect_file(self):
file_path = filedialog.askopenfilename(
filetypes=[("Media Files", "*.mp4 *.avi")]
)
if file_path:
self.current_file = file_path
self.time_label.config(text="00:00:00 / " + self.get_duration_str())
self.play_video()
تحديد طريقة ، get_duration_str التي ستستخدمها لحساب المدة الإجمالية للفيديو. إذا كان التطبيق يقوم بتشغيل مقطع فيديو ، فاحصل على مدته بالمللي ثانية وقم بتحويله إلى ملف HH: MM: SS شكل. إذا لم يكن هناك تشغيل فيديو ، فارجع 00:00:00 كقيمة افتراضية.
defget_duration_str(self):
if self.playing_video:
total_duration = self.media_player.get_length()
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
return total_duration_str
return"00:00:00"
تحديد طريقة ، شغل الفيديو. إذا لم يتم تشغيل مقطع فيديو ، فقم بإنشاء كائن وسائط جديد باستخدام مسار الملف المحدد. اربط الوسائط باللوحة التي تم إنشاؤها مسبقًا وابدأ تشغيل الفيديو. قم بتحديث ملف تشغيل الفيديو دولة ل حقيقي.
defplay_video(self):
ifnot self.playing_video:
media = self.instance.media_new(self.current_file)
self.media_player.set_media(media)
self.media_player.set_hwnd(self.media_canvas.winfo_id())
self.media_player.play()
self.playing_video = True
تحديد طريقة ، سريع إلى الأمام. إذا تم تشغيل مقطع فيديو ، فاحصل على الوقت الحالي وأضف إليه 10000 مللي ثانية. اضبط وقت التشغيل الجديد. وبالمثل ، حدد طريقة ، الترجيع التي تطرح 10000 مللي ثانية.
deffast_forward(self):
if self.playing_video:
current_time = self.media_player.get_time() + 10000
self.media_player.set_time(current_time)
defrewind(self):
if self.playing_video:
current_time = self.media_player.get_time() - 10000
self.media_player.set_time(current_time)
تحديد طريقة ، وقفة_فيديو. إذا كنت قد بدأت تشغيل أي فيديو وأوقفته مؤقتًا ، فاتصل بـ يلعب طريقة لاستئنافه. خلاف ذلك ، اتصل ب يوقف الطريقة وتحديث واجهة المستخدم وفقًا لذلك في كلتا الحالتين.
defpause_video(self):
if self.playing_video:
if self.video_paused:
self.media_player.play()
self.video_paused = False
self.pause_button.config(text="Pause")
else:
self.media_player.pause()
self.video_paused = True
self.pause_button.config(text="Resume")
تحديد طريقة ، قف. في حالة تشغيل مقطع فيديو ، أوقفه وأعد تعيين تسمية الوقت. تحديد طريقة ، set_video_position. في حالة تشغيل مقطع فيديو ، قم باسترداد المدة الإجمالية وحساب الموضع المطلوب بالمللي ثانية. اضبط وقت تشغيل الفيديو على الموضع المحسوب.
defstop(self):
if self.playing_video:
self.media_player.stop()
self.playing_video = False
self.time_label.config(text="00:00:00 / " + self.get_duration_str())
defset_video_position(self, value):
if self.playing_video:
total_duration = self.media_player.get_length()
position = int((float(value) / 100) * total_duration)
self.media_player.set_time(position)
تحديد طريقة ، update_video_progress. في حالة تشغيل مقطع فيديو ، قم باسترداد المدة الإجمالية ووقت التشغيل الحالي وحساب النسبة المئوية للتقدم. قم بتحديث شريط التقدم باستخدام هذه القيمة المحسوبة. قم بتنسيق الوقت الحالي والمدة الإجمالية بتنسيق HH: MM: SS شكل.
قم بجدولة هذه الطريقة للتشغيل مرة أخرى بعد 1000 مللي ثانية. يؤدي هذا إلى إنشاء حلقة تعمل باستمرار على تحديث تقدم الفيديو وتسميات الوقت أثناء تشغيل الفيديو.
defupdate_video_progress(self):
ifself.playing_video:
total_duration = self.media_player.get_length()
current_time = self.media_player.get_time()
progress_percentage = (current_time / total_duration) * 100
self.progress_bar.set(progress_percentage)
current_time_str = str(timedelta(milliseconds=current_time))[:-3]
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
self.time_label.config(text=f"{current_time_str}/{total_duration_str}")
self.after(1000, self.update_video_progress)
تحديد فئة ، VideoProgressBar الذي يرث من tk. حجم القطعة. حدد مُنشئًا يحدد الحالة الأولية وسلوك شريط التقدم. تعيين عرض القيمة الخيار ل خطأ شنيع لتجنب عرض القيمة الحالية.
ابدأ التقدم بنطاق من 0 إلى 100. عيّن الاتجاه والطول والأمر الذي يجب تشغيله والتخصيص لشريط التقدم. اربط حدثًا بشريط التقدم بحيث ينفذ عند النقر فوقه ملف عند النقر طريقة.
classVideoProgressBar(tk.Scale):
def__init__(self, master, command, **kwargs):
kwargs["showvalue"] = False
super().__init__(
master,
from_=0,
to=100,
orient=tk.HORIZONTAL,
length=800,
command=command,
**kwargs,
)
self.bind("" , self.on_click)
تحديد طريقة ، عند النقر. تحقق مما إذا كان شريط التقدم غير معطل ويحسب القيمة الجديدة بناءً على موضع النقرة. قم بتحديث قيمة شريط التقدم وفقًا لذلك.
defon_click(self, event):
if self.cget("state") == tk.NORMAL:
value = (event.x / self.winfo_width()) * 100
self.set(value)
قم بإنشاء مثيل لـ ميديا بلاير الطبقة ، واستدعاء update_video_progress طريقة. ال mainloop () تخبر الوظيفة Python بتشغيل حلقة حدث Tkinter والاستماع إلى الأحداث حتى تغلق النافذة.
if __name__ == "__main__":
app = MediaPlayerApp()
app.update_video_progress()
app.mainloop()
عند تشغيل البرنامج ، ينبثق مشغل وسائط الفيديو. يحتوي على ملف حدد ملف وتسميات الوقت والأزرار للتحكم في تشغيل الفيديو وشريط تقدم الفيديو.
عندما تختار مقطع فيديو ، سيتم تشغيله تلقائيًا من البداية ، مع تحديث وقت البدء ومدة تسميات الوقت.
عند ضرب يوقف الزر ، يتوقف الفيديو مؤقتًا ، ويتغير إلى ملف سيرة ذاتية زر. عند النقر فوق ملف تقديم سريع الزر ، يتم تخطي الفيديو للأمام بمقدار 10 ثوانٍ.
وبالمثل ، عند ضرب الترجيع زر يعود 10 ثوان. عند الضغط على ملف قف زر ، يتوقف تشغيل الفيديو. يمكنك سحب أو النقر فوق أي منطقة على شريط التقدم للانتقال إلى أي جزء من الفيديو وتقرأ تسمية الوقت الوقت المنقضي.
يمكنك تحسين مشغل وسائط الفيديو هذا عن طريق إضافة خيار لتحميل وعرض الترجمة. يمكنك أيضًا التفكير في ميزات مثل تغيير نسبة العرض إلى الارتفاع والتحكم في مستوى الصوت وتكرار جزء من الفيديو.
لتنفيذ هذه الميزات ، يمكنك استكشاف وحدة Pygame. Pygame متعدد الاستخدامات وسهل الاستخدام ويتكامل جيدًا مع Tkinter. تسمح المكتبة بالتخصيص ، ولها ميزات تفاعلية ، ويمكن تشغيلها على أي نظام أساسي.