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

البحث مباشرة عند الكتابة في أداة Entry

Ahmed Ahmed64

السؤال

السلام عليكم

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

لنفترض أن لدينا أداة 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')

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

يفضل أولًا تنفيذ عملية البحث ووضعها في DataFrame جديد، ثم تنفيذ drop_duplicates عليه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...