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

السؤال

نشر (معدل)

السلام عليكم

معذرة إخوتي

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...