
كيفية برمجة تطبيق مشغّل فيديو باستخدام Python و Tkinter
في عالم الوسائط المتعددة، يعد تشغيل الفيديو وظيفة أساسية.
إذا كنت مهتمًا بتعلم كيفية برمجة تطبيق بسيط لتشغيل الفيديو باستخدام Python
ومكتبة الواجهة الرسومية Tkinter، فهذا الدليل الشامل سيأخذك خطوة بخطوة
خلال عملية إنشاء مشغل فيديو أساسي. سنتناول كل شيء بدءًا من تصميم
واجهة مستخدم بسيطة بأزرار للتحكم في التشغيل، مرورًا بدمج القدرة على
تشغيل ملفات الفيديو والتحكم فيها (تشغيل، إيقاف، تقدم)، وصولًا إلى إضافة
مؤشر تقدم الفيديو ووظيفة اختيار ملف الفيديو، وإمكانية حفظ موضع
التشغيل (كميزة إضافية)، وأخيرًا نشر التطبيق ليتمكن الآخرون من استخدامه.
انطلق معنا في هذه الرحلة لتعلم كيفية برمجة تطبيق لتشغيل الفيديو
باستخدام Python Tkinter بطريقة عملية ومنظمة.
* ملاحظة هامة : تشغيل ملفات الفيديو مباشرة باستخدام Tkinter فقط ليس ممكنًا بشكل مباشر.
سنستخدم مكتبة وسائط متعددة خارجية مثل python-vlc
(واجهة Python لمشغل VLC) للتعامل مع تشغيل الفيديو وعرض الإطارات
داخل نافذة Tkinter.
* تأكد من تثبيت python-vlc :
pip install python-vlc
--
خطوات برمجة تطبيق تشغيل الفيديو باستخدام Python Tkinter
اليك خطوات برمجة تطبيق تشغيل الفيديو باستخدام Python Tkinter و python-vlc :
الخطوة 1: إعداد بيئة التطوير وتثبيت المكتبات
تأكد من تثبيت Python على جهازك. ثم قم بتثبيت مكتبة Tkinter
(عادة ما تأتي مع Python) ومكتبة python-vlc :
pip install python-vlc
--
* أنشئ ملف Python جديدًا باسم video_player.py.
الخطوة 2: استيراد المكتبات وتهيئة التطبيق
في ملف video_player.py، ابدأ باستيراد المكتبات الضرورية وتهيئة نافذة Tkinter :
Python
import tkinter as tkfrom tkinter import filedialogimport vlcimport timeimport threading
class VideoPlayer: def __init__(self, master): self.master = master master.title("مشغل الفيديو البسيط")
self.instance = vlc.Instance() self.player = self.instance.media_player_new() self.media = None
self.is_playing = False self.current_time = 0 self.duration = 0
self.create_widgets()
--
الخطوة 3: إنشاء واجهة المستخدم (Widgets)
قم بإنشاء العناصر المرئية للتحكم في تشغيل الفيديو:
Python
def create_widgets(self): self.video_frame = tk.Frame(self.master, bg="black") self.video_frame.pack(fill=tk.BOTH, expand=True) self.video_window = self.video_frame.winfo_id()
self.controls_frame = tk.Frame(self.master) self.controls_frame.pack(fill=tk.X)
self.open_button = tk.Button(self.controls_frame, text="فتح", command=self.open_file) self.open_button.pack(side=tk.LEFT, padx=5, pady=5)
self.play_pause_button = tk.Button(self.controls_frame, text="تشغيل", command=self.play_pause) self.play_pause_button.pack(side=tk.LEFT, padx=5, pady=5)
self.progress_bar = tk.Scale(self.controls_frame, from_=0, to=1000, orient=tk.HORIZONTAL, label="التقدم", command=self.seek, showvalue=False) self.progress_bar.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5, pady=5)
--
الخطوة 4: وظيفة فتح ملف الفيديو
اسمح للمستخدم باختيار ملف فيديو من خلال مربع حوار:
Python
def open_file(self): file_path = filedialog.askopenfilename( defaultextension=".mp4", filetypes=[("ملفات الفيديو", "*.mp4;*.avi;*.mkv"), ("جميع الملفات", "*.*")] ) if file_path: self.media = self.instance.media_new(file_path) self.player.set_media(self.media) self.player.set_hwnd(self.video_window) # ربط الفيديو بإطار Tkinter self.play_pause_button.config(text="تشغيل") self.is_playing = False self.update_duration()
--
الخطوة 5: وظيفة تشغيل/إيقاف الفيديو
تحكم في حالة تشغيل الفيديو:
Python
def play_pause(self):
if self.media:
if self.is_playing:
self.player.pause()
self.play_pause_button.config(text="تشغيل")
self.is_playing = False
else:
self.player.play()
self.play_pause_button.config(text="إيقاف")
self.is_playing = True
self.update_progress()
--
الخطوة 6: وظيفة البحث في الفيديو (التقدم)
اسمح للمستخدم بالانتقال إلى أجزاء مختلفة من الفيديو:
Python
def seek(self, value):
if self.media and self.duration > 0:
position = float(value) / 1000.0
self.player.set_position(position)
--
الخطوة 7: تحديث مؤشر التقدم ومدة الفيديو
قم بتحديث واجهة المستخدم لتعكس حالة تشغيل الفيديو:
Python
def update_progress(self):
if self.is_playing and self.duration > 0:
current_time_ms = self.player.get_time()
position = float(current_time_ms) / self.duration
progress_value = int(position * 1000)
self.progress_bar.set(progress_value)
self.master.after(100, self.update_progress) # تحديث كل 100 مللي ثانية
def update_duration(self):
if self.media:
self.duration = self.player.get_length()
self.progress_bar.config(to=1000)
--
الخطوة 8: حفظ موضع تشغيل الفيديو (ميزة إضافية)
لتنفيذ حفظ موضع التشغيل، ستحتاج إلى تخزين هذا الموضع
(على سبيل المثال، في ملف) واستعادته عند فتح نفس الفيديو مرة أخرى.
هذا يتطلب إضافة منطق إضافي لتتبع الملفات التي تم تشغيلها ومواضعها.
إليك مثال بسيط لكيفية حفظ الموضع الحالي عند إغلاق التطبيق واستعادته (يتطلب تحسينًا لإدارة ملفات متعددة):
Python
import jsonimport os
# ... (بقية الكود)
class VideoPlayer: def __init__(self, master): # ... (التهيئة) self.last_played = {} self.load_last_played() master.protocol("WM_DELETE_WINDOW", self.on_closing)
def load_last_played(self): try: with open("last_played.json", "r") as f: self.last_played = json.load(f) except FileNotFoundError: pass
def save_last_played(self): if self.media: file_path = self.media.get_mrl() current_time_ms = self.player.get_time() self.last_played[file_path] = current_time_ms with open("last_played.json", "w") as f: json.dump(self.last_played, f)
def open_file(self): # ... (فتح الملف) if file_path: # ... (تعيين الوسائط) if file_path in self.last_played: self.player.play() # ابدأ التشغيل لاستعادة الموضع self.player.set_time(self.last_played[file_path]) self.play_pause_button.config(text="إيقاف") self.is_playing = True self.update_progress() else: self.play_pause_button.config(text="تشغيل") self.is_playing = False self.update_duration()
def on_closing(self): self.save_last_played() self.master.destroy()
# ... (إنشاء النافذة الرئيسية وتشغيل التطبيق)
--
الخطوة 9: إنشاء النافذة الرئيسية وتشغيل التطبيق
أضف الكود لإنشاء نافذة Tkinter وتشغيل تطبيق مشغل الفيديو :
Python
if __name__ == "__main__":
root = tk.Tk()
player = VideoPlayer(root)
root.mainloop()
--
الخطوة 10: نشر التطبيق
لنشر تطبيق Tkinter يعتمد على مكتبات خارجية مثل python-vlc، يمكنك اتباع عدة طرق:
* توزيع الكود المصدري مع تعليمات التثبيت :
يمكن للمستخدمين الذين لديهم Python و Tkinter و python-vlc
مثبتين تشغيل ملف video_player.py مباشرة.
قم بتضمين تعليمات مفصلة لتثبيت python-vlc.
* إنشاء ملف تنفيذي باستخدام PyInstaller :
يمكن لـ PyInstaller تجميع برنامج Python وجميع تبعياته في ملف
تنفيذي واحد قابل للتوزيع لأنظمة تشغيل مختلفة (Windows، macOS، Linux).
قد تحتاج إلى بعض التكوين الإضافي لتضمين مكتبة VLC وملفاتها الضرورية بشكل صحيح.
* التثبيت :
pip install pyinstaller
--
* إنشاء الملف التنفيذي (قد يتطلب تعديلات):
pyinstaller --onefile --add-binary "C:\Program Files\VideoLAN\VLC\libvlc.dll;." --add-binary "C:\Program Files\VideoLAN\VLC\libvlccore.dll;." video_player.py
--
* ملاحظة : استبدل المسارات في --add-binary بالمسارات الفعلية
لملفات libvlc.dll و libvlccore.dll على نظامك.
قد يختلف موقع هذه الملفات حسب نظام التشغيل وتثبيت VLC.
* استخدام cx_Freeze:
بديل آخر لـ PyInstaller لإنشاء ملفات تنفيذية. قد يتطلب أيضًا بعض التكوين لتضمين مكتبة VLC.
* التثبيت :
pip install cx_Freeze
--
* إنشاء ملف الإعداد (setup.py):
قم بإنشاء ملف setup.py يتضمن مكتبة vlc كأحد التضمينات :
Python
import cx_Freezeimport sysimport os
base = Noneif sys.platform == "win32": base = "Win32GUI"
vlc_plugins_dir = os.path.join(os.path.dirname(sys.executable), 'libvlc-3.0.18', 'plugins') # قد يختلف الإصدار والمسار
cx_Freeze.setup( name="SimpleVideoPlayer", version="0.1", description="مشغل فيديو بسيط باستخدام Python Tkinter و VLC", executables=[cx_Freeze.Executable("video_player.py", base=base)], options={ "build_exe": { "packages": ["vlc"], "include_files": [(vlc_plugins_dir, 'plugins')] # تضمين مجلد الإضافات } })
--
* بناء الملف التنفيذي :
python setup.py build
--
* ملاحظة : قد تحتاج إلى تعديل مسار vlc_plugins_dir ليطابق موقع تثبيت VLC على نظامك.
* الخلاصة :
لقد تعلمت الآن كيفية برمجة تطبيق بسيط لتشغيل الفيديو باستخدام Python Tkinter
ومكتبة python-vlc. قمنا بإنشاء واجهة مستخدم أساسية، ودمجنا
وظيفة فتح وتشغيل وإيقاف الفيديو، وأضفنا مؤشر تقدم الفيديو ووظيفة اختيار الملف.
كما تناولنا كيفية إضافة ميزة حفظ موضع التشغيل وكيفية نشر التطبيق.
يمكنك الآن تطوير هذا التطبيق بإضافة المزيد من الميزات مثل التحكم في مستوى الصوت،
وأزرار التنقل للأمام والخلف، ودعم الترجمة، وقوائم التشغيل، وتحسين واجهة المستخدم.
تذكر أن نشر التطبيقات التي تعتمد على مكتبات خارجية قد يتطلب بعض الجهد
الإضافي لضمان تضمين جميع الملفات الضرورية. استمر في التجربة والتطوير!