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

توضيح استيراد أسماء أوراق العمل من ملف Excel باستخدام مكتبة pandas

Ahmed Ahmed64

السؤال

السلام عليكم

معذرة إخوتي

أواجه مشكلة في كتابة دالة 

حيث أن وظيفة الدالة تقتصر على تحميل ملف 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

تم التعديل في بواسطة Ahmed Ahmed64
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

المشكلة هي في الغالب في تعريف المتغير 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
بتاريخ 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()

ماذا يعني هذا

تم التعديل في بواسطة Ahmed Ahmed64
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 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
 

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

  • 0
بتاريخ 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()

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...