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

خطأ بالكود محتاج التتبع و التصحيح

Ahmed Ahmed64

السؤال

السلام عليكم

الرجاء التتبع وتصحيح هذا الخطأ

AttributeError: 'Frame1' object has no attribute 'sht'

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 LoadFile():
            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)
            
            
            AD = self.sht()
            self.optionmenu1.values = AD

        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=LoadFile)
        self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="we")

        self.optionmenu1 = customtkinter.CTkOptionMenu(self)
        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.button2 = customtkinter.CTkButton(self, text="خروج", state="disabled", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=button_event)
        self.button2.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()

 

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

Recommended Posts

  • 0

و عليكم السلام ,

يظهر أن الخطأ ينبع من حقيقة أن الطريقة sht معرفة داخل دالة __init__ في class Frame1، ويتم محاولة الوصول إليها كما لو كانت سمة. لحل هذا، يجب عليك تحديد sht كطريقة للclass بحيث يمكن الوصول إليها باستخدام self.sht().

إليك class Frame1 المعدل:
 

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 LoadFile():
            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)
            
            AD = self.sht()
            self.optionmenu1.values = AD

        self.button1 = customtkinter.CTkButton(self, text="إختيار ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=LoadFile)
        self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="we")

        self.optionmenu1 = customtkinter.CTkOptionMenu(self)
        self.optionmenu1.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we")

    def sht(self):
        if self.AS:
            AD = self.AS.sheet_names
            return AD
        else:
            return []

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.button2 = customtkinter.CTkButton(self, text="خروج", state="disabled", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=button_event)
        self.button2.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()

 

الآن، تم تحديد sht كطريقة داخل class Frame1، ويجب أن يمكن الوصول إليها دون أي خطأ في السمة.

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

  • 0
بتاريخ 2 ساعة قال Ahmed Elmrsawy:

و عليكم السلام ,

يظهر أن الخطأ ينبع من حقيقة أن الطريقة sht معرفة داخل دالة __init__ في class Frame1، ويتم محاولة الوصول إليها كما لو كانت سمة. لحل هذا، يجب عليك تحديد sht كطريقة للclass بحيث يمكن الوصول إليها باستخدام self.sht().

إليك class Frame1 المعدل:
 

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 LoadFile():
            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)
            
            AD = self.sht()
            self.optionmenu1.values = AD

        self.button1 = customtkinter.CTkButton(self, text="إختيار ملف", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=LoadFile)
        self.button1.grid(row=0, column=1, padx=3, pady=(3, 0), sticky="we")

        self.optionmenu1 = customtkinter.CTkOptionMenu(self)
        self.optionmenu1.grid(row=0, column=0, padx=3, pady=(3, 0), sticky="we")

    def sht(self):
        if self.AS:
            AD = self.AS.sheet_names
            return AD
        else:
            return []

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.button2 = customtkinter.CTkButton(self, text="خروج", state="disabled", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"), command=button_event)
        self.button2.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()

 

الآن، تم تحديد sht كطريقة داخل class Frame1، ويجب أن يمكن الوصول إليها دون أي خطأ في السمة.

صحيح أخي لقد قمت بإزالة الخطأ 

لاكن السؤال الأن لماذا هذا الكود لم ينفذ

self.optionmenu1.values = AD

حيث تبقى القائمة فارغة

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...