Ahmed Ahmed64 نشر 26 ديسمبر 2023 أرسل تقرير نشر 26 ديسمبر 2023 (معدل) السلام عليكم معذرة إخوتي أواجه مشكلة في كتابة دالة حيث أن وظيفة الدالة تقتصر على تحميل ملف Excel Files وتسترجع أسماء أوراق العمل الموجود داخل الملف import customtkinter from tkinter import filedialog from pathlib import Path import pandas as pd class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) def openFile(): filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) filepathA = Path(filepath) AS = pd.ExcelFile(filepathA) def sht(): AD = AS.sheet_names return(AD) self.button = customtkinter.CTkButton(self, text="فتح ملف",font=customtkinter.CTkFont(family="Calibri" ,size=12, weight="bold"),command=openFile) self.button.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we") self.optionmenu2 = customtkinter.CTkOptionMenu(self,values=sht) self.optionmenu2.grid(row=1, column=0, padx=3, pady=(3, 0), sticky="we") الكود السابق محاولة مني وحدث به خطأ الخطوة التالية أحاول تنفيذ أن يتم تحميل نتائج الدالة السابقة في داخل أداة optionmenu تم التعديل في 26 ديسمبر 2023 بواسطة Ahmed Ahmed64 1 اقتباس
0 محمد سعد شحرور نشر 26 ديسمبر 2023 أرسل تقرير نشر 26 ديسمبر 2023 المشكلة هي في الغالب في تعريف المتغير AS لأنه تم تعريفه داخل دالة ال openFile ومحاولة الوصول اليه داخل دالة sht. الحل يكون في تعريف المتحول As في الصنف ككل: import customtkinter from tkinter import filedialog from pathlib import Path import pandas as pd class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.AS = None # عرف المتغير هنا لتستطيع كل الدوال الوصول اليه def openFile(): filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"), ("all files", "*.*"))) filepathA = Path(filepath) self.AS = pd.ExcelFile(filepathA) def sht(): if self.AS: AD = self.AS.sheet_names return AD else: return [] self.button = customtkinter.CTkButton(self, text="فتح ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=openFile) self.button.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we") self.optionmenu2 = customtkinter.CTkOptionMenu(self, values=sht) self.optionmenu2.grid(row=1, column=0, padx=3, pady=(3, 0), sticky="we") بالاضافة الى ذلك، تحقق من مسار ملف ال excel الذي تحاول الوصول اليه. اذا مازال الخطأ موجودا، ف أرجو توضيحه. بالتوفيق اقتباس
0 Ahmed Ahmed64 نشر 26 ديسمبر 2023 الكاتب أرسل تقرير نشر 26 ديسمبر 2023 (معدل) بتاريخ 24 دقائق مضت قال محمد سعد شحرور: المشكلة هي في الغالب في تعريف المتغير AS لأنه تم تعريفه داخل دالة ال openFile ومحاولة الوصول اليه داخل دالة sht. الحل يكون في تعريف المتحول As في الصنف ككل: import customtkinter from tkinter import filedialog from pathlib import Path import pandas as pd class Frame2(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.AS = None # عرف المتغير هنا لتستطيع كل الدوال الوصول اليه def openFile(): filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"), ("all files", "*.*"))) filepathA = Path(filepath) self.AS = pd.ExcelFile(filepathA) def sht(): if self.AS: AD = self.AS.sheet_names return AD else: return [] self.button = customtkinter.CTkButton(self, text="فتح ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=openFile) self.button.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we") self.optionmenu2 = customtkinter.CTkOptionMenu(self, values=sht) self.optionmenu2.grid(row=1, column=0, padx=3, pady=(3, 0), sticky="we") بالاضافة الى ذلك، تحقق من مسار ملف ال excel الذي تحاول الوصول اليه. اذا مازال الخطأ موجودا، ف أرجو توضيحه. بالتوفيق عند التعديل كما فعلت ظهر لي هذا الخطأ object of type 'function' has no len() ماذا يعني هذا تم التعديل في 26 ديسمبر 2023 بواسطة Ahmed Ahmed64 اقتباس
0 محمد سعد شحرور نشر 26 ديسمبر 2023 أرسل تقرير نشر 26 ديسمبر 2023 بتاريخ 1 ساعة قال Ahmed Ahmed64: عند التعديل كما فعلت ظهر لي هذا الخطأ object of type 'function' has no len() ماذا يعني هذا هذا الخطأ يعني أنه يتم تمرير تابع كما هو، عوضا عن تمرير tuple او list في السطر الخاص ب self.optionsmenu2: self.optionmenu2 = customtkinter.CTkOptionMenu(self, values=sht()) باضافة الأقواس () للتابع sh في النهاية يتم تمرير ماتعيده الدالة عوضا عن الدالة نفسها، حيث تعيد هذه الدالة list كما تتطلب ال self.optionmenu2 1 اقتباس
0 Ahmed Ahmed64 نشر 26 ديسمبر 2023 الكاتب أرسل تقرير نشر 26 ديسمبر 2023 بتاريخ 2 ساعة قال محمد سعد شحرور: هذا الخطأ يعني أنه يتم تمرير تابع كما هو، عوضا عن تمرير tuple او list في السطر الخاص ب self.optionsmenu2: self.optionmenu2 = customtkinter.CTkOptionMenu(self, values=sht()) باضافة الأقواس () للتابع sh في النهاية يتم تمرير ماتعيده الدالة عوضا عن الدالة نفسها، حيث تعيد هذه الدالة list كما تتطلب ال self.optionmenu2 أخي رجاءاً هذا كود التطبيق الرجاء التعديل عليه أحتاج عند الضغط على زر اختيار الملف القائمة تمتلئ بأسماء أوراق العمل import customtkinter from tkinter import filedialog from pathlib import Path import pandas as pd class Frame1(customtkinter.CTkFrame): def __init__(self, master): super().__init__(master) self.AS = None def openFile(): filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) filepathA = Path(filepath) self.AS = pd.ExcelFile(filepathA) def sht(): if self.AS: AD = self.AS.sheet_names return AD else: return [] self.button1 = customtkinter.CTkButton(self, text="إختيار ملف",font=customtkinter.CTkFont(family="Calibri" ,size=12, weight="bold"),command=openFile) self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="we") self.optionmenu1 = customtkinter.CTkOptionMenu(self,values=sht()) self.optionmenu1.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we") 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) def button_event(): print("خروج") self.button3 = customtkinter.CTkButton(self, text="خروج",state= "disabled",font=customtkinter.CTkFont(family="Calibri" ,size=12, weight="bold"),command=button_event) self.button3.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) customtkinter.set_appearance_mode("dark") customtkinter.set_default_color_theme("dark-blue") self.Frame_A = Frame1(self) 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() اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم
معذرة إخوتي
أواجه مشكلة في كتابة دالة
حيث أن وظيفة الدالة تقتصر على تحميل ملف Excel Files وتسترجع أسماء أوراق العمل الموجود داخل الملف
الكود السابق محاولة مني وحدث به خطأ
الخطوة التالية أحاول تنفيذ أن يتم تحميل نتائج الدالة السابقة في داخل أداة optionmenu
تم التعديل في بواسطة Ahmed Ahmed644 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.