Ali Ali49 نشر 12 يوليو 2023 أرسل تقرير نشر 12 يوليو 2023 (معدل) السلام عليكم الرجاء تصحيح كتابة الكود حيث أريد جلب إسم إوراق العمل من ملف الإكسل إلى أداة Combobox عند إختيار الملف الكود الأول ملف كلاس مستقل from openpyxl import load_workbook class load_document: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active كود البرنامج import ttkbootstrap as ttk from ttkbootstrap.constants import * from openpyxl import load_workbook from pathlib import Path from tkinter import filedialog from L_Documents import load_document BOOK1 = load_document() column_values=() def COLS_V(): file_path = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) BOOK1 = load_document(file_path) BOOK1.load_file() column_values = BOOK1.workbook.sheetnames # أدوات الواجهة root = ttk.Window(themename="minty") #----------------------------------------------------------- frame = ttk.Frame(root) frame.pack() #----------------------------------------------------------- widgets_frame = ttk.LabelFrame(frame, text="إختر الملف") widgets_frame.grid(row=0, column=0, padx=20, pady=5, sticky="nsew") #----------------------------------------------------------- b1 = ttk.Button(widgets_frame, text="إختر الملف", bootstyle=("info", "outline"), command=COLS_V) b1.grid(row=0, column=0, padx=5, pady=5, sticky="ew") #----------------------------------------------------------- combo = ttk.Combobox(widgets_frame, values=column_values) combo.grid(row=2, column=0, padx=5, pady=5, sticky="ew") root.mainloop() تم التعديل في 12 يوليو 2023 بواسطة Mustafa Suleiman تعديل عنوان السؤال 1 اقتباس
0 عمر قره محمد نشر 12 يوليو 2023 أرسل تقرير نشر 12 يوليو 2023 يبدو أن الكود يحتوي على بعض الأخطاء. جرب تعديل الدالة `COLS_V` لتحديث قيم `Combobox` بعد اختيار الملف، و يمكنك القيام بذلك عن طريق إضافة السطر التالي في نهاية الدالة `COLS_V`: combo['values'] = column_values بالإضافة إلى ذلك، دعنا نغيير السطر التالي: column_values = BOOK1.workbook.sheetnames إلى: global column_values column_values = BOOK1.workbook.sheetnames هذا يضمن أن قيم `column_values` ستتحدث عند اختيار الملف. ليصبح الكود المعدل بالكامل بالشكل : from openpyxl import load_workbook import ttkbootstrap as ttk from tkinter import filedialog class load_document: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active BOOK1 = load_document() column_values=() def COLS_V(): # اختيار الملف file_path = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) BOOK1 = load_document(file_path) BOOK1.load_file() # تحديث قيم column_values global column_values column_values = BOOK1.workbook.sheetnames # تحديث قيم Combobox combo['values'] = column_values # أدوات الواجهة root = ttk.Window(themename="minty") #----------------------------------------------------------- frame = ttk.Frame(root) frame.pack() #----------------------------------------------------------- widgets_frame = ttk.LabelFrame(frame, text="إختر الملف") widgets_frame.grid(row=0, column=0, padx=20, pady=5, sticky="nsew") #----------------------------------------------------------- b1 = ttk.Button(widgets_frame, text="إختر الملف", bootstyle=("info", "outline"), command=COLS_V) b1.grid(row=0, column=0, padx=5, pady=5, sticky="ew") #----------------------------------------------------------- combo = ttk.Combobox(widgets_frame, values=column_values) combo.grid(row=2, column=0, padx=5, pady=5, sticky="ew") root.mainloop() اقتباس
0 Ali Ali49 نشر 12 يوليو 2023 الكاتب أرسل تقرير نشر 12 يوليو 2023 إخي بارك الله فيك تمام الكود يعمل كما كنت إريد لنفترض أني قمت بالتعديل التالي أين الخطأ الأن from openpyxl import load_workbook import ttkbootstrap as ttk from tkinter import filedialog class load_document: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active BOOK1 = load_document() column_values=() def COLS_V(): # اختيار الملف file_path = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) BOOK1 = load_document(file_path) BOOK1.load_file() def COLS_V2(): global column_values column_values = BOOK1.workbook.sheetnames # تحديث قيم Combobox combo['values'] = column_values # أدوات الواجهة root = ttk.Window(themename="minty") #----------------------------------------------------------- frame = ttk.Frame(root) frame.pack() #----------------------------------------------------------- widgets_frame = ttk.LabelFrame(frame, text="إختر الملف") widgets_frame.grid(row=0, column=0, padx=20, pady=5, sticky="nsew") #----------------------------------------------------------- b1 = ttk.Button(widgets_frame, text="إختر الملف", bootstyle=("info", "outline"), command=COLS_V) b1.grid(row=0, column=0, padx=5, pady=5, sticky="ew") b2 = ttk.Button(widgets_frame, text="إدرج أوراق العمل للقائمة", bootstyle=("info", "outline"), command=COLS_V2) b2.grid(row=1, column=0, padx=5, pady=5, sticky="ew") #----------------------------------------------------------- combo = ttk.Combobox(widgets_frame, values=column_values) combo.grid(row=2, column=0, padx=5, pady=5, sticky="ew") root.mainloop() 1 اقتباس
0 Mustafa Suleiman نشر 12 يوليو 2023 أرسل تقرير نشر 12 يوليو 2023 الكود به عدة أخطاء: في السطر import ttkbootstrap as ttk، الوارد في السطر الثاني، تحتاج إلى استبدالها بـ from tkinter import ttk، حيث أن ttkbootstrap ليس وحدة معترف بها في مكتبة tkinter. في السطر BOOK1 = load_document(file_path)، يجب تمرير القيمة file_path كوسيطة للكائن load_document بدلاً من BATH، وتغيير السطر إلى BOOK1 = load_document(file_path). يجب استدعاء load_file() لتحميل الملف داخل الدالة COLS_V() بعد تعيين قيمة BATH لكائن BOOK1، وتغيير السطر BOOK1.load_file() إلى BOOK1.load_file(). تحديث قائمة column_values داخل الدالة COLS_V2() بعد تحميل الملف واستعادة أسماء الأوراق، أي تغيير السطر column_values = BOOK1.workbook.sheetnames إلى column_values = BOOK1.sheet.sheetnames. from openpyxl import load_workbook from tkinter import ttk, filedialog class load_document: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active BOOK1 = load_document() column_values = () def COLS_V(): # اختيار الملف file_path = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes=(("text files","*.xlsx"),("all files","*.*"))) BOOK1 = load_document(file_path) BOOK1.load_file() def COLS_V2(): global column_values column_values = BOOK1.sheet.sheetnames # تحديث قيم Combobox combo['values'] = column_values # أدوات الواجهة root = ttk.Tk() #----------------------------------------------------------- frame = ttk.Frame(root) frame.pack() #----------------------------------------------------------- widgets_frame = ttk.LabelFrame(frame, text="إختر الملف") widgets_frame.grid(row=0, column=0, padx=20, pady=5, sticky="nsew") #----------------------------------------------------------- b1 = ttk.Button(widgets_frame, text="إختر الملف", style="info.Outline.TButton", command=COLS_V) b1.grid(row=0, column=0, padx=5, pady=5, sticky="ew") b2 = ttk.Button(widgets_frame, text="إدرج أوراق العمل للقائمة", style="info.Outline.TButton", command=COLS_V2) b2.grid(row=1, column=0, padx=5, pady=5, sticky="ew") #----------------------------------------------------------- combo = ttk.Combobox(widgets_frame, values=column_values) combo.grid(row=2, column=0, padx=5, pady=5, sticky="ew") root.mainloop() اقتباس
0 Kais Hasan نشر 13 يوليو 2023 أرسل تقرير نشر 13 يوليو 2023 بعض الأخطاء التي لا تؤثر على عمل البرامج و لكن ستسبب بعض المشاكل في حال كنت تعمل في فريق، و هي طريقة التسمية الخاصة بأي شيء. لقد قمت بتسمية الكلاس بأحرف صغيرة و هذا خطأ، يجب تسميته بحيث يكون أول حرف من كل كلمة كبير. لقد قمت بتسمية متغير ضمن الكلاس بأحرف كبيرة بشكل كامل، هذا نقوم به فقط للثوابت العامة و ليس للمتغيرات المحلية، يجب تسميته بأحرف صغيرة فقط. من غير الجيد نهائياً القيام بما يلي: from ttkbootstrap.constants import * هذا من أسوء الأمور التي قد يقوم بها الشخص في بايثون، يجب تحديد ما تريد تصديره بشكل واضح أو قم بكتابة ما يلي: from ttkbootstrap import constants هكذا يمكنك الوصول إلى قيمة ضمن constants عن طريق كتابة constants.val حيث val هي القيمة المراد الوصول إليها. اقتباس
السؤال
Ali Ali49
السلام عليكم
الرجاء تصحيح كتابة الكود
حيث أريد جلب إسم إوراق العمل من ملف الإكسل إلى أداة Combobox عند إختيار الملف
الكود الأول ملف كلاس مستقل
كود البرنامج
تعديل عنوان السؤال
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.