اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

من خلال العنوان أردت أن أسأل عن إسم الدالة أو الوظيفة التي من خلالها بمجرد الكتابة يتنفذ أمر البحث مباشرة

لنفترض أن لدينا أداة Treeview بها مجموعة كبيرة من السجلات مثلا  وأحتاج من خلال عمود معين أن أبحث في فيه أن إسم  من خلال أداة Entry بمجرد كتابة حرف تتم الفلترة مباشرة

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله،

لا توجد وظيفة جاهزة لتنفيذ عملية البحث بمجرد الكتابة مباشرة في أداة الإدخال Entry،

ولكن يمكن عمل ذلك بطريقة أخرى، سأعطيك بعض الإرشادات التي ستمكنك بإذن الله من تنفيذ ما تريده، إضافة إلى تنمية مهارة البحث والتعلم الذاتي،

يوجد في أداة الإدخال حدث ينطلق عند الضغط على أي مفتاح من لوحة المفاتيح، وهو الحدث Key، فمن خلاله نستطيع استدعاء وظيفة نقوم بكتابتها ويتم تنفيذها كلما انطلق هذا الحدث (أي كلما ضغط المستخدم زرًا على لوحة المفاتيح)

ويتم الربط بالشكل التالي

self.entry1.bind('<Key>', self.search)

يتم كتابة السطر السابق في الباني __init__

الخطوة التالية هي إنشاء وظيف تسمى search وكتابة الشيفرات المطلوبة لعملية البحث أو أي خوارزمية أخرى

    def search(self, key):
        print(key, key.char)
        

كما هو واضح الوظيفة تحتاج معامل key والذي من خلاله نستطيع الحصول على معلومات عن الزر الذي تم ضغطه،

يمكنك كتابة الشيفرات المطلوبة في هذه الوظيفة.

  • 0
نشر
بتاريخ On 26‏/1‏/2024 at 08:24 قال El Sayed El Tohamy:

وعليكم السلام ورحمة الله،

لا توجد وظيفة جاهزة لتنفيذ عملية البحث بمجرد الكتابة مباشرة في أداة الإدخال Entry،

ولكن يمكن عمل ذلك بطريقة أخرى، سأعطيك بعض الإرشادات التي ستمكنك بإذن الله من تنفيذ ما تريده، إضافة إلى تنمية مهارة البحث والتعلم الذاتي،

يوجد في أداة الإدخال حدث ينطلق عند الضغط على أي مفتاح من لوحة المفاتيح، وهو الحدث Key، فمن خلاله نستطيع استدعاء وظيفة نقوم بكتابتها ويتم تنفيذها كلما انطلق هذا الحدث (أي كلما ضغط المستخدم زرًا على لوحة المفاتيح)

ويتم الربط بالشكل التالي

self.entry1.bind('<Key>', self.search)

يتم كتابة السطر السابق في الباني __init__

الخطوة التالية هي إنشاء وظيف تسمى search وكتابة الشيفرات المطلوبة لعملية البحث أو أي خوارزمية أخرى

    def search(self, key):
        print(key, key.char)
        

كما هو واضح الوظيفة تحتاج معامل key والذي من خلاله نستطيع الحصول على معلومات عن الزر الذي تم ضغطه،

يمكنك كتابة الشيفرات المطلوبة في هذه الوظيفة.

أستاذي أحتاج إلى التعديل على هذا الكود الذي وضيفته البحث في أداة  Treeview من خلال أداة entry

    def sr(self, Key):
        query =  self.entry1.get()
        selections = []
        for child in self.tree.get_children():
            if query in self.tree.item(child)['values']:
                self.tree.delete()
                print(self.tree.item(child)['values'])
                selections.append(child)
        self.tree.selection_set(selections)

التعديل الذي أحتاج القيام به هو بمجرد كتابة أول حرف من الكلمة المراد البحث عنها من خلال  أداة entry يتم البحث عن النتائج المطابقة وحذف باقي السجلات الغير المطابقة 

  • 0
نشر
بتاريخ 37 دقائق مضت قال Ahmed Ahmed64:

التعديل الذي أحتاج القيام به هو بمجرد كتابة أول حرف من الكلمة المراد البحث عنها من خلال  أداة entry يتم البحث عن النتائج المطابقة وحذف باقي السجلات الغير المطابقة 

في البداية أود أن أحييك على المجهود الرائع الذي بذلته، سأرشدك لبعض النقاط تسهل عليك الأمر،

أليست البيانات تأتي من ملف إكسيل (على ما أتذكر)؟ وتضعها داخل DataFrame؟

يمكنك البحث داخل DataFrame عن الخصائص التي تريدها، وتأخذ النتائج في DataFrame جديد ثم تطبقه على treeview

يمكنك الرجوع لهذا المثال

بالتوفيق

  • 0
نشر (معدل)
بتاريخ 49 دقائق مضت قال El Sayed El Tohamy:

في البداية أود أن أحييك على المجهود الرائع الذي بذلته، سأرشدك لبعض النقاط تسهل عليك الأمر،

أليست البيانات تأتي من ملف إكسيل (على ما أتذكر)؟ وتضعها داخل DataFrame؟

يمكنك البحث داخل DataFrame عن الخصائص التي تريدها، وتأخذ النتائج في DataFrame جديد ثم تطبقه على treeview

يمكنك الرجوع لهذا المثال

بالتوفيق

أشكرك أستاذي جزاك الله خيرا

هل ما قمت به صحيح أم هناك تصحيح للكود في الحقيقة الشفرة تعمل جيدا

 

ولاكن أحتاج إلى أمر بسيط

عند البحث قد تكون هناك قيم مكرر داخل DataFrame كيف أستطيع تجاهل تكرار القيم عند البحث وجلب أول قيمة

    def s_r(self, Key):
        query = self.entry1.get()
       
        for row in self.tree.get_children():
            self.tree.delete(row)
      
        for index, row in self.A1[self.A1[0].str.contains(query)].iterrows():
            self.tree.insert('', 'end', values=(row[0],))

 

تم التعديل في بواسطة Ahmed Ahmed64
  • 0
نشر
بتاريخ 32 دقائق مضت قال Ahmed Ahmed64:

ولاكن أحتاج إلى أمر بسيط

عند البحث قد تكون هناك قيم مكرر داخل DataFrame كيف أستطيع تجاهل تكرار القيم عند البحث وجلب أول قيمة

يمكننا تجاهل التكرارات عن طريق الوظيفة

drop_duplicates()

وهي تخص DataFrame

  • 0
نشر
بتاريخ 18 ساعة قال El Sayed El Tohamy:

يمكننا تجاهل التكرارات عن طريق الوظيفة

drop_duplicates()

وهي تخص DataFrame

ما مشكلة هذا الكود لا يقوم بإزالة التكرار 

df1.drop_duplicates(subset='إسم الطالب',keep='first')

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...