-
المساهمات
2064 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
13
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Chihab Hedidi
-
الخطأ يحدث في السطر: df1['إسم المادة'] = col_A لأنك تقوم بتعيين قيم لعمود 'إسم المادة' بشكل كامل، وبالتالي تحتاج إلى التأكد من أن الطول (عدد الصفوف) للعمود الذي تقوم بتعيينه يتطابق مع عدد الصفوف في df1. لحل هذا، يمكنك تعديل الكود على النحو التالي: df1['إسم المادة'] = col_A[:len(df1)] بهذا التعديل، ستقوم بتعيين القيم فقط للصفوف التي توجد في df1، مما يحل المشكلة التي تواجهك.
- 5 اجابة
-
- 1
-
لغات مثل Dart لإطار العمل Flutter وJavaScript لـ React Native و حتى java مصممة خصيصا للعمل على المنصات المحمولة، مما يمنحها أداء أفضل في بعض الحالات مقارنة بـ Python. كما أن لديهم مجتمعات تطوير نشطة وشركات كبيرة تدعمهما، مما يجعلهما خيارات شائعة لتطوير تطبيقات الهواتف المحمولة، Flutter و React Native يحصلان على تحديثات منتظمة ودعم رسمي من قبل Google وFacebook على التوالي، مما يعني استمرارية التطوير وتحسين الأداء. لغة البيثون متعددة الإستعمالات لكن لديها مجالات محددة قوية فيهم أهمها الذكاء الإصطناعي، لذلك فهي تبرز في هذا المجال أفضل.
-
يمكنك القيام بذلك بإستخدام الميثود melt حيث تقوم بإعادة تنسيق ال dataframe الخاصة بك على حسب العمود الذي تريد، و هذا مثال بسيط للكود الذي يوضح ذلك: import pandas as pd # نفترض أن DataFrame الخاص بك يسمى df data = { 'رقم الطالب': ['A001', 'A002'], 'عربي': [50, 60], 'حساب': [73, 80], 'علوم': [50, 60], 'جغرافيا': [55, 70] } df = pd.DataFrame(data) # قم بتحويل الDataFrame melted_df = pd.melt(df, id_vars=['رقم الطالب'], var_name='column', value_name='value') # قم بفرز الDataFrame المحولة بناءً على 'رقم الطالب' melted_df = melted_df.sort_values(by=['رقم الطالب']) # عرض الDataFrame المحولة print(melted_df)
- 2 اجابة
-
- 1
-
بالطبع يمكنك استخدام مكتبة pandas في Python لحفظ ملف Excel جديد ولحفظ البيانات في نفس الملف، حيث بعد إنشاء DataFrame جديدة باستخدام بياناتك، يتم حفظها في ملف Excel جديد، ثم يتم قراءة الملف للتحقق من الحفظ الصحيح، وبعد ذلك يتم إضافة بيانات جديدة إلى DataFrame ويتم الدمج بينها وبين البيانات الموجودة في الملف السابق، ثم يتم حفظ النتيجة في نفس الملف. فيما يلي مثال بسيط: import pandas as pd # قم بإنشاء DataFrame جديدة (يمكنك استخدام بياناتك الفعلية) data = {'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']} df = pd.DataFrame(data) # اسم الملف الجديد file_path = 'مسار_الملف/اسم_الملف.xlsx' # حفظ DataFrame في ملف Excel جديد df.to_excel(file_path, index=False) # إعادة قراءة الملف للتحقق من الحفظ الصحيح df_read = pd.read_excel(file_path) # قم بإضافة بيانات جديدة إلى DataFrame new_data = {'Column1': [4, 5], 'Column2': ['D', 'E']} df_new = pd.DataFrame(new_data) # الدمج بين DataFrame الحالية والبيانات الجديدة df_combined = pd.concat([df_read, df_new], ignore_index=True) # حفظ البيانات المدموجة في نفس الملف df_combined.to_excel(file_path, index=False) print("تم حفظ البيانات بنجاح.") يرجى تغيير مسار_الملف/اسم_الملف.xlsx إلى المسار الذي تريد حفظ الملف فيه،
-
إذا كنت تستخدم مكتبة tkinter يمكنك استخدام الدالة os.path.basename() لاستخراج اسم الملف من المسار الكامل الذي تم اختياره، فيما يلي مثال بسيط: import tkinter as tk from tkinter import filedialog import os def open_file_dialog(): file_path = filedialog.askopenfilename() if file_path: file_name = os.path.basename(file_path) print("اسم الملف:", file_name) # إعداد النافذة الرئيسية root = tk.Tk() root.withdraw() # لإخفاء النافذة الرئيسية إذا لم تكن مطلوبة # زر لفتح مربع حوار اختيار الملف button = tk.Button(root, text="اختيار ملف", command=open_file_dialog) button.pack() # تشغيل البرنامج root.mainloop() عند تشغيل هذا البرنامج، سيتم فتح مربع حوار لاختيار ملف، وبعد اختيار الملف سيتم طباعة اسم الملف.
- 2 اجابة
-
- 1
-
يظهر هذا الخطأ عندما يكون هناك تضارب في إستخدام Tk و Toplevel في تصميم الواجهة الرسومية، و الظاهر أن الخطأ قد يكون ناتجا عن توريث الفئة Menu من customtkinter.CTkFrame و App في الوقت نفسه، مما يؤدي إلى إنشاء نافذة رئيسية و Toplevel في نفس الوقت. لتجنب هذا الخطأ، يمكنك إزالة الوراثة المتعددة واستخدام واجهة المستخدم الرئيسية App كنافذة رئيسية واستخدام Menu كـ Toplevel إذا كنت بحاجة إلى نافذة فرعية. و هذا الكود المصحح: import customtkinter import tkinter as tk from tkinter import filedialog, messagebox, ttk import pandas as pd from pathlib import Path class App(customtkinter.CTk): def __init__(self): super().__init__() self.title("App-v1") self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) Menu(self) def File_dialog(self): self.filename = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"), ("all files", "*.*"))) self.label_file["text"] = self.filename return None def Load_excel_data(self): file_path = self.label_file["text"] try: excel_filename = r"{}".format(file_path) if excel_filename[-4:] == ".csv": df = pd.read_csv(excel_filename) else: df = pd.ExcelFile(excel_filename) self.optionmenu1.configure(values=df.sheet_names) self.label2["text"] = df.sheet_names except ValueError: tk.messagebox.showerror("Information", "The file you have chosen is invalid") return None except FileNotFoundError: tk.messagebox.showerror("Information", f"No such file as {file_path}") return None class Menu(tk.Toplevel): def __init__(self, master): super().__init__(master) self.title("Menu") self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) self.create_widgets() def create_widgets(self): self.button1 = customtkinter.CTkButton(self, text='Button 1', command=self.master.File_dialog) self.button1.grid(row=0, column=0, sticky='e') self.label_file = ttk.Label(self, text="") self.label_file.grid(row=1, column=0, sticky='e') self.button2 = customtkinter.CTkButton(self, text='Button 2', command=self.master.Load_excel_data) self.button2.grid(row=2, column=0, sticky='e') self.label2 = ttk.Label(self, text="") self.label2.grid(row=3, column=0, sticky='e') self.optionmenu1 = customtkinter.CTkOptionMenu(self, values=["إختر ورقة العمل"], font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.optionmenu1.grid(row=4, column=0, padx=(10, 10), pady=(10, 10), sticky="e") app = App() app.mainloop()
-
يشير الخطأ إلى مشكلة في محاولة إعادة ترتيب DataFrame باستخدام الفهرس، و أدى هذا إلى تعارض في القيم و يعتبر الفهرس جزءا مهما في هيكل DataFrame، حيث يجب أن يكون لكل صف قيمة فريدة في الفهرس. لمعالجة هذا الخطأ تأكد من أن الفهرس لديك لا يحتوي على قيم مكررة عن طريق الكود التالي: df[df.index.duplicated()] في حالة وجدت قيما مكررة، قم بتصحيحها بالكود التالي: df = df[~df.index.duplicated()]
-
ابحث عن ملفات السجل أو log files التي تم إنشاؤها أثناء عملية التحويل، يمكن أن تحتوي هذه الملفات على معلومات قد تساعد في تحديد سبب المشكلة، ربما لم يتم بناء البرنامج بشكل صحيح. إذا لم يكن هناك ايرورز جرب إستخدام مكتبة أخرى و أنصحك ب PyInstaller لأنني إستعملتها من قبل و كانت تشتغل بدون مشاكل.
-
مرحبا كمال، اذا كانت قاعدة البيانات تتصل بدون أي مشاكل، أرفق ملف المشروع للإطلاع عليه أكثر. بالتوفيق.
-
مرحبا كمال، حاول استخدام هذا الكود وتأكد من أن جميع علامات PHP تأتي بالترتيب الصحيح: <?php $server = 'DESKTOP-PJDLJNR'; $database = 'Legacy'; $username = ''; $password = ''; $connection = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password); if (!$connection) { die(print_r(sqlsrv_errors(), true)); } $sql_query = 'SELECT * FROM Problemss'; $statement = $connection->query($sql_query); ?> <table border="1" width="100%"> <tr> <th>تم</th> <th>الحلول</th> <th>المشكلة</th> <th>م</th> <th>الرقم</th> </tr> <?php while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $row['تم']?></td> <td><?php echo $row['الحلول']?></td> <td><?php echo $row['المشكلة']?></td> <td><?php echo $row['م']?></td> <td><?php echo $row['الرقم']?></td> </tr> <?php } ?> </table> <?php $connection = null; // إغلاق الاتصال بقاعدة البيانات ?> بالتوفيق إن شاء الله.
-
مرحبا كمال، يبدو أن هناك خطأ في تركيبة كود PHP الخاص بك، بحيث أن العبارة print_r($row); يجب أن تكون خارج الحلقة وقبل جدول HTML، و أيضا يجب عليك إغلاق علامة PHP بشكل صحيح قبل بدء كود HTML. هذا كود ال php بعد التصحيح: <?php $server = 'DESKTOP-PJDLJNR'; $database = 'Legacy'; $username = ''; $password = ''; $connection = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password); if (!$connection) { die(print_r(sqlsrv_errors(), true)); } $sql_query = 'SELECT * FROM Problemss'; $statement = $connection->query($sql_query); ?> <table border="1" width="100%"> <tr> <th>تم</th> <th>الحلول</th> <th>المشكلة</th> <th>م</th> <th>الرقم</th> </tr> <?php while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $row['تم']?></td> <td><?php echo $row['الحلول']?></td> <td><?php echo $row['المشكلة']?></td> <td><?php echo $row['م']?></td> <td><?php echo $row['الرقم']?></td> </tr> <?php } $connection = null; // close the connection ?> </table> تأكد من استبدال القيم المؤقتة لـ $username و $password بالقيم الفعلية لاعتمادك على قاعدة البيانات. بالتوفيق إن شاء الله @كمال صالح محمد
-
الخطأ الذي تواجهه يحدث عندما يكون لديك أعمدة متكررة في DataFrame الخاص بك، مما يؤدي إلى فشل عملية إعادة التسمية (Reindexing) لحل هذا الخطأ، يمكنك إضافة ignore_index=True عند استخدام دالة concat و يمكنك تغيير السطر البرمجي الأخير ليصح كالتالي: result = pd.concat(frames, ignore_index=True) بهذه الطريقة، ستقوم pandas بإعادة ترقيم الفهارس بشكل فريد بدلا من محاولة استخدام الفهارس الحالية، مما يمنع حدوث الخطأ الذي تواجهه.
- 1 جواب
-
- 1
-
هو المتغير الذي فيه البيانات التي ستحفظها في الملف، لنفرض مثلا ان ملف الاكسل الخاص بك فيه عمودين name و email ، يكون المتغير بهذه الطريقة: row_information = {"Name": "شهاب", "Email": "chihab@mail.com"}
- 3 اجابة
-
- 1
-
حل الأسئلة الإختبارية لا نجيبه بشكل مباشر و لكن سأشرح لك طريقة الحل لتستطيعي كتابة الحل بمفردك، أولا يجب عليك الطلب من المستخدم إدخال رقم الموظف الذين يريد أن يبحث عنه، نستخدم Scanner لاستقبال إدخال المستخدم. للبحث في المصفوفة نستخدم حلقة for-each للانتقال عبر جميع العناصر في المصفوفة ونقوم بمقارنة كل عنصر (رقم الموظف) مع الرقم الذي أدخله المستخدم، إذا تم العثور على تطابق، نعين المتغير ليكن مثلا بإسم found على القيمة true ونوقف الحلقة بإستخدام break. في الأخير ادوات الشرط if-else لطباعة نتيجة البحث، حيث اذا كان الموظف موجود (قيمة found هي true)، نطبع "الموظف موجود في القائمة". - إذا لم يتم العثور على الموظف نطبع "الموظف غير موجود في القائمة".
-
هذه الميثود غير موجودة في مكتبة Pandas يمكن استعمال الميثود loc بحيث تقوم بالتأشير على السطر الأخير بعدها تضيف المعلومات فيه، و هذا كود لتفهم أكثر: df = pd.read_excel("example.xlsx") df.loc[len(df)] = row_information df.to_excel("example.xlsx", index=False) نستخدم loc لتحديد سطر في DataFrame باستخدام الفهرس (index). في هذا السياق، استخدمت len(df) للإشارة إلى السطر الأخير في DataFrame ومن ثم إضافة معلومات الصف الجديدة row_information إلى هذا السطر.
-
لديك بعض المشكلات في الربط بين الكلاسات في الكود الخاص بك، يجب عليك تصحيح الطريقة التي تقوم بها بتمرير الـ method إلى الأزرار داخل Frame2، يجب تمرير instance من الكلاس App إلى Frame2 واستخدام هذا الـ instance لاستدعاء الـ LoadFile و LoadFile1. إليك الكود المصحح: import customtkinter from tkinter import filedialog from pathlib import Path import pandas as pd class App(customtkinter.CTk): def __init__(self): super().__init__() self.FilePath = None self.sh = None self.title("App-v1") self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) customtkinter.set_appearance_mode("dark") customtkinter.set_default_color_theme("green") Frame_A = Frame1(self) Frame_A.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="ew", columnspan=2) Frame_A.grid_columnconfigure(0, weight=1) Frame_A.configure(border_width=1, border_color="#0087f2") Frame_B = Frame2(self) Frame_B.grid(row=1, column=0, padx=(10, 10), pady=(10, 10), sticky="news") Frame_B.grid_columnconfigure(0, weight=1) Frame_B.configure(border_width=1, border_color="#0087f2") def LoadFile(self): self.FilePath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"), ("all files", "*.*"))) return self.FilePath def LoadFile1(self): df = pd.ExcelFile(self.FilePath) self.sh = df.sheet_names print(self.sh) class Frame1(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.label1 = customtkinter.CTkLabel(self, text="Welcome", fg_color="transparent", font=customtkinter.CTkFont(family="Calibri", size=18, weight="bold"), justify="center") self.label1.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="n") class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) # تمرير الـ instance من الـ App لـ Frame2 self.button1 = customtkinter.CTkButton(self, text="Open File", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=master.LoadFile) # استخدام الـ instance لاستدعاء الـ method self.button1.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="e") self.button2 = customtkinter.CTkButton(self, text="Open File", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=master.LoadFile1) # استخدام الـ instance لاستدعاء الـ method self.button2.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="e") app = App() app.mainloop() قمت بتعديل الأزرار داخل Frame2 لتمرير الـ instance الخاصة بـ App واستخدمتها لاستدعاء الـ method.
-
للوصول إلى المتغيرات بين الكلاسات في لغة البرمجة، يمكنك استخدام مفهوم الوراثة حيث تسمح لك بإنشاء كلاس جديد يرث الخصائص والسلوكيات من كلاس آخر. سأحاول أن اشرح لك بمثال متفهم أكثر: لنفترض أنه لدينا Class A مع دالة ترجع قيمة: class A: def __init__(self): self.result = 0 def do_something(self): # قم بعملية هنا واحتفظ بالناتج في self.result self.result = 42 ثم لنقم بإنشاء Class B ونرث من Class A: class B(A): def __init__(self): # يمكنك استدعاء __init__ من الكلاس الأساسي باستخدام super() super().__init__() def do_another_thing(self): # يمكنك الآن الوصول إلى self.result من Class A print(f"The result from Class A is: {self.result}") و بهذا يمكنك استخدام Class B والوصول إلى المتغير result الذي تم حفظه في Class A بواسطة دالة do_something: # إنشاء كائن من Class B obj_b = B() # استدعاء الدالة do_something التي تأتي من Class A obj_b.do_something() # استخدام الدالة do_another_thing التي تأتي من Class B obj_b.do_another_thing() وهذا المفهوم عام ويمكن تطبيقه بطرق مختلفة حسب اللغة.
- 1 جواب
-
- 1
-
مرحبا، يمكنك إستخدام ميزة فلتر مثل ما ذكر الأخ عبد الباسط ولكن لم توضح بعد الفكرة التي تريدها، يعني لا يمكنك إخفاء خانة واحدة لأنه سيحدث خلل في ترتيب الأعمدة و الصفوف، يمكنك فقط إما إخفاء سطر كامل و عمود كامل، و اذا كنت تقصد فكرة أخرى أرجو أن تشرحها مرة أخرى. بالتوفيق إن شاء الله.
- 45 تعليقات
-
- if
- الدالة الشرطية
-
(و 3 أكثر)
موسوم في:
-
الكود الذي ارسلته يشتغل بدون اي مشاكل، اذا قمت بتعديل آخر أرسل الكود الجديد.
-
نعم يمكنك ذلك بحدث الكود من داخل Fram1 و تكتبه داخل App بهذه الطريقة: import customtkinter class Frame1(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.button1 = customtkinter.CTkButton(self, text="إختيار ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="w") class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.checkbox_1 = customtkinter.CTkCheckBox(self, text="checkbox 1") self.checkbox_1.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="w") class Frame3(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.button2 = customtkinter.CTkButton(self, text="خروج", state="disabled", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.button2.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="w") class App(customtkinter.CTk): def __init__(self): super().__init__() self.title("my app") self.geometry("400x180") self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.Frame_A = Frame1(self) self.Frame_A.configure(border_color="red", border_width=3 ,fg_color="blue") self.Frame_A.grid(row=0, column=0, padx=1, pady=(1, 0), sticky="nswe") self.Frame_B = Frame2(self) self.Frame_B.grid(row=0, column=1, padx=1, pady=(1, 0), sticky="nswe") self.Frame_C = Frame3(self) self.Frame_C.grid(row=1, column=0, padx=1, pady=(1, 10), sticky="nswe") app = App() app.mainloop() اما بخصوص التعريب يمكنك استخدام الميثود pack كهذا المثال: self.button1.pack(side="right")
-
في المثال الذي ارسلته قمت بالتمرير من داخل class App مثل الكود الذي كان موجود: self.Frame_A = Frame1(self, "red", 3, "blue") و هذا الكود كامل اذا اردت تجربه: import customtkinter class Frame1(customtkinter.CTkFrame): def __init__(self, master, border_color, border_width, fg_color): super().__init__(master) self.configure(border_width=border_width,border_color=border_color,fg_color=fg_color) self.button1 = customtkinter.CTkButton(self, text="إختيار ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="w") class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.checkbox_1 = customtkinter.CTkCheckBox(self, text="checkbox 1") self.checkbox_1.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="w") class Frame3(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.button2 = customtkinter.CTkButton(self, text="خروج", state="disabled", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.button2.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="w") class App(customtkinter.CTk): def __init__(self): super().__init__() self.title("my app") self.geometry("400x180") self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.Frame_A = Frame1(self, "red", 3, "blue") self.Frame_A.grid(row=0, column=0, padx=1, pady=(1, 0), sticky="nswe") self.Frame_B = Frame2(self) self.Frame_B.grid(row=0, column=1, padx=1, pady=(1, 0), sticky="nswe") self.Frame_C = Frame3(self) self.Frame_C.grid(row=1, column=0, padx=1, pady=(1, 10), sticky="nswe") app = App() app.mainloop()
-
يمكنك ذلك باستخدام الميثود configure و ذلك بإستخادم المدخلات الخاصة بك و هذا كود ال Frame1 معدل و يمكنك تعديل باقي الكود بنفس الطريقة: class Frame1(customtkinter.CTkFrame): def __init__(self, master, border_color, border_width, fg_color): super().__init__(master) self.configure(border_width=border_width,border_color=border_color,fg_color=fg_color) self.button1 = customtkinter.CTkButton(self, text="إختيار ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold")) self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="w") و هذه صورة للنتيجة:
- 8 اجابة
-
- 1
-
يوجد العديد من الأسباب التي يمكن ان تكون السبب، أهمها ان تتأكد من الtoken الخاص بالبوت و انه مربوط مع الكود، إذهب الى botfather على تلغرام، و بعدها اختر البوت الخاص بك و سيتم ارسال ال api token اليك مرة أخرى قم بنسخة و وضعه في الكود الخاص بك. تأكد من خلال الكود الخاص بالبوت انه ليس مقيد لمستخدمين محددين فقط. حاول دائما ان تبدأ برمجة البوت بأوامر سهلة مع تجربتها لتتأكد انه شغال و هذا كود بسيط لبوت تلغرام: from telegram.ext import Updater, CommandHandler # استبدال "YOUR_TOKEN" بتوكن البوت الخاص بك TOKEN = "YOUR_TOKEN" def start(update, context): update.message.reply_text('مرحبًا بك في البوت!') def main(): # إعداد البوت باستخدام التوكن updater = Updater(TOKEN, use_context=True) # الحصول على مدير التحديثات dp = updater.dispatcher # إضافة معالج الأمر "/start" dp.add_handler(CommandHandler("start", start)) # بدء البوت updater.start_polling() # البقاء على البوت نشطًا حتى يتم الضغط على Ctrl-C updater.idle() if __name__ == '__main__': main() بعد التأكد انه شغال قم بإضافة الأوامر التي تريدها مع التعديل اللازم على الكود.
- 2 اجابة
-
- 1
-
يمكنك استخدام مكتبة node-notifier للتفاعل مع نظام الإشعارات في Node.js، و ايضا تستخدم react-toast-notifications أو مكتبة مماثلة في React لإظهار إشعارات في الواجهة الأمامية. اولا قم بتثبيت المكتبتين بالأمر التالي: npm install react-toast-notifications node-notifier و بعدها تكون البرمجة في الواجهة الخلفية بالطريقة التالية: const notifier = require('node-notifier'); // قم بتعيين وقت التنبيه الخاص بك const eventDate = new Date('2023-12-31T12:00:00'); // حساب الفارق بين الوقت الحالي ووقت الحدث const timeDiff = eventDate - new Date(); // قم بتعيين وقت للتنبيه قبل الحدث (مثلا: قبل ساعة) const alertTime = 60 * 60 * 1000; // ساعة واحدة // إذا كان الفارق بين الوقت الحالي ووقت الحدث أقل من وقت التنبيه، أرسل إشعار if (timeDiff > 0 && timeDiff <= alertTime) { notifier.notify({ title: 'تنبيه مهم', message: 'لديك موعد قريبًا!', // يمكنك إضافة المزيد من الخيارات هنا }); } و في الواجهة الأمامية استخدم react-toast-notifications من أجل اظهار الإشعارات: import { useToasts } from 'react-toast-notifications'; function MyComponent() { const { addToast } = useToasts(); // قم بإظهار إشعار عند تحميل المكون أو أثناء عملية الحفظ useEffect(() => { addToast('تم حفظ الموعد بنجاح!', { appearance: 'success' }); }, []); return ( <div> {/* محتوى المكون */} </div> ); } من المهم أن تتأكد من أن خادم Node.js يقوم بالتحقق من الأحداث بشكل دوري ويرسل إشعارات عندما يكون الوقت مناسب. كما يجب عليك التحقق من تكامل هذه الأكواد مع تطبيقك الكامل وتعديلها حسب احتياجاتك الخاصة.
- 1 جواب
-
- 1