Ahmed Ahmed64 نشر 23 ديسمبر 2022 أرسل تقرير نشر 23 ديسمبر 2022 السلام عليكم كيف أستطيع جلب بيانات عمود معين من ملف إكسل إلى أداة combobox بلغة البايثون grab columns into combobox py python المكتبات المستخدمة tkinter , openpyxl أرجو التوضيح ولو بمثال عملي 1 اقتباس
0 Ahmed Ahmed64 نشر 23 ديسمبر 2022 الكاتب أرسل تقرير نشر 23 ديسمبر 2022 بتاريخ منذ ساعة مضت قال Ahmed Ahmed: السلام عليكم كيف أستطيع جلب بيانات عمود معين من ملف إكسل إلى أداة combobox بلغة البايثون grab columns into combobox py python المكتبات المستخدمة tkinter , openpyxl أرجو التوضيح ولو بمثال عملي أرجو تصحيح الكود from tkinter import * from tkinter import ttk from openpyxl.workbook import workbook from openpyxl import load_workbook form_A=Tk() form_A.geometry('500x500') wb=load_workbook('2003-2004.xlsx') ws=wb.active colum_A = ws['A'] Combo1=ttk.Combobox(form_A,value=column_A) Combo1.pack(pady=30) form_A.mainloop() 1 اقتباس
0 مسعود زاهي نشر 23 ديسمبر 2022 أرسل تقرير نشر 23 ديسمبر 2022 بتاريخ 6 ساعة قال Ahmed Ahmed: أرجو تصحيح الكود from tkinter import * from tkinter import ttk from openpyxl.workbook import workbook from openpyxl import load_workbook form_A=Tk() form_A.geometry('500x500') wb=load_workbook('2003-2004.xlsx') ws=wb.active colum_A = ws['A'] Combo1=ttk.Combobox(form_A,value=column_A) Combo1.pack(pady=30) form_A.mainloop() مرحبا أحمد، الشيفرة التي قمت بإرفاقها تقوم بما طلبته، حيث أنها تقوم بقراءة عمود في ملف إكسل وهو العمود A colum_A = ws['A'] وتقوم بإضافته إلى ال combobox: Combo1=ttk.Combobox(form_A,value=column_A) # ^^^^^^^^ # قم باستعمال colum_A لكن عند عرض محتوى ال combobox نجد أنه يحتوي على قيم تبدأ ب Cell: لتصحيح هذا الأمر قم بتغيير الشيفرة: Combo1=ttk.Combobox(form_A,value=colum_A) إلى: Combo1=ttk.Combobox(form_A,value=[cell.value for cell in colum_A]) # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # ننشئ مصفوفة تحتوي على قيم الخانات وسوف تظهر النتيجة على الشكل التالي: بالتوفيق. 2 اقتباس
0 Ahmed Ahmed64 نشر 23 ديسمبر 2022 الكاتب أرسل تقرير نشر 23 ديسمبر 2022 أشكرك جزيل الشكر أخي < مسعود زاهي > بارك الله فيك على الإجابة. أخي مسعود أطمع في مساعدة أخرى وقد عجزت عن تنفيذها ماذا لو كان لديا عمود أخر على سبيل المثال العمود B وأريد أن أجلب قيمة معينه من هذا العمود بناءا على القيمة التي تقابلها من العمود A وذلك تكمله للمثال السابق عن الأختيار من combobox حيث أريد عرض النتيجة في مربع النص. 1 اقتباس
0 مسعود زاهي نشر 23 ديسمبر 2022 أرسل تقرير نشر 23 ديسمبر 2022 بتاريخ 42 دقائق مضت قال Ahmed Ahmed: أشكرك جزيل الشكر أخي < مسعود زاهي > بارك الله فيك على الإجابة. أخي مسعود أطمع في مساعدة أخرى وقد عجزت عن تنفيذها ماذا لو كان لديا عمود أخر على سبيل المثال العمود B وأريد أن أجلب قيمة معينه من هذا العمود بناءا على القيمة التي تقابلها من العمود A وذلك تكمله للمثال السابق عن الأختيار من combobox حيث أريد عرض النتيجة في مربع النص. مرحبا مجددا أحمد، توجد عدة طرق لحل هذا الأمر. أحسن طريقة هو إنشاء نوع Combobx يسمح لك بحفظ قيمة الخانة في الاكسل مع رقم عمودها: class KeyValueCombobox(ttk.Combobox): def __init__(self, master=None, cnf={}, **options): self.dict = None if 'values' in options: if isinstance(options.get('values'), dict): self.dict = options.get('values') options['values'] = sorted(self.dict.keys()) ttk.Combobox.__init__(self, **options) def get(self): if self.dict: return self.dict[ttk.Combobox.get(self)] else: return ttk.Combobox.get(self) def get_key(self): return ttk.Combobox.get(self) def get_value(self): return self.get() KeyValueCombobox هو صنف جديد يرث من ttk.Combobox يسمح لنا بحفظ قاموس بدل مصفوفة. يمكننا استعماله على الشكل التالي: colum_A = ws['A'] #بعد جلب العمود من الاكسل # نحفظ القيم مع رقم الخانة في قاموس items = {} for key, cell in enumerate(colum_A): items[str(key)] = str(cell.value) # نقوم بتمرير القاموس الى الصنف الذي أنشأناه Combo1= KeyValueCombobox(form_A,values= items) لمعرفة العنصر الذي اختاره المستخدم من ال Combobox ينبغي علينا استعمال التابع bind على الشكل التالي: # هذه الدالة تعمل عند اختيار عنصر من # Combobox def onSelect(event): # نحصل على قيمة الخانة # B # المقابلة للتي اخترناها من # A cell_b = ws[f'B{Combo1.get_key()}'] print(cell_b.value) Combo1.bind('<<ComboboxSelected>>', onSelect) بالتوفيق. 1 اقتباس
0 Ahmed Ahmed64 نشر 23 ديسمبر 2022 الكاتب أرسل تقرير نشر 23 ديسمبر 2022 ألف تحية لك أخي مسعود وزادك الله علما نافعا شكرا جزيلا الشرح بإذن الله واضح لاكن لو سمحت كيف أجعل قيمة الك Combobox التي تضهر للمستخدم قيم العمود A وليس رقم الخلية 1 اقتباس
0 مسعود زاهي نشر 24 ديسمبر 2022 أرسل تقرير نشر 24 ديسمبر 2022 بتاريخ 12 ساعة قال Ahmed Ahmed: ألف تحية لك أخي مسعود وزادك الله علما نافعا شكرا جزيلا الشرح بإذن الله واضح لاكن لو سمحت كيف أجعل قيمة الك Combobox التي تضهر للمستخدم قيم العمود A وليس رقم الخلية إذا طبقت ما ذُكر سابقا فإن القيمة هي التي سوف تظهر ولن يظهر رقم الخلية. قم بمشاركة الشيفرة البرمجية التي كتبتها مع التحديثات وأيضا أرفق ملف الاكسل الذي تعمل عليه وسوف نقوم بمساعدتك. بالتوفيق. اقتباس
0 Ahmed Ahmed64 نشر 27 ديسمبر 2022 الكاتب أرسل تقرير نشر 27 ديسمبر 2022 أخي لقد طرحت سؤالي بعد تجريب الكود وهذا ما ظهر لدي وهوا رقم الخلية وليس القيمة الموجودة بالخلية أرجو تبسيط الكود أكثر أو طريقة أخرى لذلك from tkinter import * from tkinter import ttk from openpyxl.workbook import workbook from openpyxl import load_workbook form_A=Tk() form_A.geometry('500x500') wb=load_workbook('2003-2004.xlsx') ws=wb.active class KeyValueCombobox(ttk.Combobox): def __init__(self, master=None, cnf={}, **options): self.dict = None if 'values' in options: if isinstance(options.get('values'), dict): self.dict = options.get('values') options['values'] = sorted(self.dict.keys()) ttk.Combobox.__init__(self, **options) def get(self): if self.dict: return self.dict[ttk.Combobox.get(self)] else: return ttk.Combobox.get(self) def get_key(self): return ttk.Combobox.get(self) def get_value(self): return self.get() colum_A = ws['A'] items = {} for key, cell in enumerate(colum_A): items[str(key)] = str(cell.value) Combo1= KeyValueCombobox(form_A,values= items) def onSelect(event): cell_b = ws[f'B{Combo1.get_key()}'] print(cell_b.value) Combo1.bind('<<ComboboxSelected>>', onSelect) Combo1.pack(pady=30) form_A.mainloop() 2003-2004.xlsx اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم
كيف أستطيع جلب بيانات عمود معين من ملف إكسل إلى أداة combobox بلغة البايثون
grab columns into combobox py python
المكتبات المستخدمة tkinter , openpyxl
أرجو التوضيح ولو بمثال عملي
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.