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

السؤال

نشر

السلام عليكم

إخوتي لدي هذا الكلاس

class Frame2(customtkinter.CTkFrame):
    def __init__(self, master, border_color, border_width):
        super().__init__(master)
        self.configure(border_width=border_width,border_color=border_color)

        self.df = 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.df = pd.ExcelFile(filepathA)
            def optionmenu_callback(choice):
                #print("optionmenu dropdown clicked:", choice)
                self.label2.configure(text=choice)
            self.optionmenu1.configure(values = self.sht(),command=optionmenu_callback)

          
		            
        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=(10, 10), pady=(10, 10), sticky="nw")
        
        self.optionmenu1 = customtkinter.CTkOptionMenu(self,values=["إختر ورقة العمل"], font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"))
        self.optionmenu1.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="nw")
        
        self.label2 = customtkinter.CTkLabel(self, text="", text_color="#0087f2", font=customtkinter.CTkFont(family="Calibri", size=14, weight="bold"))
        self.label2.grid(row=1, column=0, padx=(10, 10), pady=(10, 10), sticky="nw")
        
        self.label3 = customtkinter.CTkLabel(self, text="إسم ورقة العمل المختارة :", fg_color="transparent", font=customtkinter.CTkFont(family="Calibri", size=14, weight="bold"))
        self.label3.grid(row=1, column=1, padx=(10, 10), pady=(10, 10), sticky="nw")
        
    def sht(self):
            AD = self.df.sheet_names
            return AD

 

ولدي هذا الكلاس

class Frame4(customtkinter.CTkFrame):
    def __init__(self, master, border_color, border_width):
        super().__init__(master)
        self.configure(border_width=border_width,border_color=border_color)
        
        def cooll():

            
            selected_column_1 = self.df.iloc[8::2, [0,1,2,3,4,5,6]]
            selected_column_1.reset_index(drop=True, inplace=True)
            A = pd.DataFrame(selected_column_1)
            print(A) 

        self.checkbox_1 = customtkinter.CTkCheckBox(self, text="checkbox 1")
        self.checkbox_1.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="news")
        
        self.button3 = customtkinter.CTkButton(self, text="طباعة العمود", font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"),command=cooll)
        self.button3.grid(row=1, column=0, padx=(10, 10), pady=(10, 10), sticky="nw")

السؤال كيف أصل إلى الكلاس الأول من داخل الكلاس الثاني

مثلا أريد أن أصل إلى self.df الموجودة في الكلاس الأول داخل الكلاس الثاني

Recommended Posts

  • 0
نشر

بشكل عام، يمكنك الوصول الى خاصة ضمن class1 في class2 عن طريق انشاء مرجع في class2 تدل الى class1.

أي أنه عليك انشاء مرجع لل frame2 لل frame4 للوصول الى خاصة ال df:

class Frame4(customtkinter.CTkFrame):
  # عرف مرجع للكلاس الأول هنا
    def __init__(self, master, border_color, border_width, frame2_instance):
        super().__init__(master)
        self.configure(border_width=border_width, border_color=border_color)

        # قم بتخزين قيمة هذا المرجع
        self.frame2_instance = frame2_instance

       # باقي الكود الخاص بك

بعد ذلك تعطي المرجع قيمة، وهي نسخة من ال frame2 لتستطيع الوصول الى كافة خواص ال frame2 ضمن ال frame4:

frame2_instance = Frame2(master, border_color, border_width)
frame4_instance = Frame4(master, border_color, border_width, frame2_instance)
  • 0
نشر
بتاريخ 28 دقائق مضت قال محمد سعد شحرور:

بشكل عام، يمكنك الوصول الى خاصة ضمن class1 في class2 عن طريق انشاء مرجع في class2 تدل الى class1.

أي أنه عليك انشاء مرجع لل frame2 لل frame4 للوصول الى خاصة ال df:

class Frame4(customtkinter.CTkFrame):
  # عرف مرجع للكلاس الأول هنا
    def __init__(self, master, border_color, border_width, frame2_instance):
        super().__init__(master)
        self.configure(border_width=border_width, border_color=border_color)

        # قم بتخزين قيمة هذا المرجع
        self.frame2_instance = frame2_instance

       # باقي الكود الخاص بك

بعد ذلك تعطي المرجع قيمة، وهي نسخة من ال frame2 لتستطيع الوصول الى كافة خواص ال frame2 ضمن ال frame4:

frame2_instance = Frame2(master, border_color, border_width)
frame4_instance = Frame4(master, border_color, border_width, frame2_instance)

هل من توضيح أكثر أخي 

  • 0
نشر
بتاريخ 1 ساعة قال Ahmed Ahmed64:

هل من توضيح أكثر أخي 

هذا مثال عام عن ذات الفكرة في الوراثة في لغة بايثون ليسهل عليك فهمها وتطبيقها في مثالك:
 

class ClassA:
    def __init__(self, value):
        self.value = value

class ClassB:
  	# تعريف متغير يسمى مرجع سيحمل قيمة من الصنف السابق
    def __init__(self, class_a_instance):
        self.class_a_instance = class_a_instance

    # تعريف تابع يقوم بطباعة هذه القيمة من الضنف السابق
    def access_property(self):
        print("Value from ClassA:", self.class_a_instance.value)

# انشاء مثال للصنف الأول واعطائه قيمة
obj_a = ClassA(value=1)

# انشاء مثال للضنف الثاني وتمرير المثال السابق اليه ليصبح الصنف الثاني قادر على الوصول الى قيمة ال 1 
obj_b = ClassB(class_a_instance=obj_a)

# طباعة ال 1 من الصنف الثاني بعد تمريرها من الصنف الأول
obj_b.access_property()

 

  • 0
نشر
بتاريخ On 28‏/12‏/2023 at 15:58 قال Ahmed Ahmed64:

في الحقيقة الأمر صعب ولم أفهم طريقة شرح الكود

أخي هل من شرح على الكود الخاص بي لتضح لي الفكرة أكثر وجزاك الله خيراَ

صديقي كل ما عليك هو أن تنشأ نسختين (مثالين) من الصنفين الخاصين بك، وأن تممر أحدى النسخ (الأمثلة) الى النسخة (المثال) الاخر.

بعد ذلك تذهب الى الصنف الثاني الذي تم تمرير النسخة اليه وتصل الى هذه العناصر التي تم تمريرها.

أرجو منك قراءة التعليقات الخاصة بي بتمعن وتجربتها لديك، ويمكنك رؤية هذا الجواب أيضا بأسلوب اخر.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...