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

السؤال

نشر

الرجاء مراجعة وتصحيح الكود لو وجد خطأ

أحتاج من الشفرة أن تقوم بالنسخ من أداة Treeview

حيث حاولت بجميع الطرق التي أعرفها ولاكن لم ينجح أمر النسخ

الأن سأرسل الشفرة الخاصة بالأداة وكود النسخ واللصق الرجاء المراجعة والتحقق من كتابة الكود

class App(ctk.CTk,tk.Tk):
    def __init__(self):
        super().__init__()
        ctk.set_appearance_mode("light")
        ctk.set_default_color_theme("blue")
        self.geometry("600x500")
        self.title("Tk example")
        self.columnconfigure(0, weight = 1)
        self.rowconfigure(0, weight = 1)
        
        self.Frame1 = ctk.CTkFrame(self , border_width = 1,border_color= "#ff6c0b",fg_color = "#FFFFFF")
        self.Frame1.grid(row=0, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame1.columnconfigure(0, weight = 1)
        self.Frame1.rowconfigure(0, weight = 1)
#Treeview         
        self.tree = ttk.Treeview(self.Frame1)
        self.tree.grid(row=0, column=0, padx=(5, 5), pady=(5, 5),sticky='ewn')
        self.tree.bind('<Button-3>', self.popup_menu)        
# القائمة        
        self.popup1 = tk.Menu(self.tree, tearoff=0)
        self.popup1.add_command( command=self.it_copy, label="Copy")
        self.popup1.add_command( command=self.it_paste, label="paste")
# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        self.clipboard_clear()
        self.clipboard_append(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        self.text = root.clipboard_get()    
        self.tree.insert("", "end", text=self.text) 

# إظهر القائمة
    def popup_menu(self,event):
        self.tree.identify_row(event.y)
        self.popup1.post(event.x_root, event.y_root) 

         
app = App()
app.mainloop() 

أنا أقوم بفتح ملف excel وأقوم بتحويلة إلى pd.DataFrame

ومن ثم أتعامل مع هذه DataFrame وأقوم بجلب عمود فقط وأقوم بعد ذلك بعرضة على أداة Treeview

وهذا الجزء الخاص بهذه العملية

    def ruN_FILENAME(self):
        if hasattr(self, 'file_name') and self.file_name:
            self.df = pd.read_excel(self.file_name,sheet_name=self.sh_t,header=None)
            
            self.A = self.df.iloc[8::2, [0]]
            self.A1 = pd.DataFrame(self.A )

            self.tree["column"]=list(self.A1.columns)
            self.tree["show"] = "headings"
            for column in self.tree["column"]:
                self.tree.heading(column , text=column)
            df_rows = self.A1.to_numpy().tolist()
            for row in df_rows:
                self.tree.insert("" , "end" , values = row)

حيث أصل إلى مرحلة العرض على أداة Treeview و تظهر النتيجة عليها 

وعند محاولة نسخ سجل تظهر القائمة بدون مشاكل ولاكن عند الضغط لا يستجيب النسخ

Recommended Posts

  • 0
نشر
بتاريخ 6 ساعة قال Ahmed Ahmed64:
# اللصق
    def it_paste(self):
        self.text = root.clipboard_get()    
        self.tree.insert("", "end", text=self.text) 

استبدل كلمة root بـ self

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

هذه شيفرات إضافة العناصر يدويًا

        self.tree.insert("", "end", text="Item 1")
        self.tree.insert("", "end", text="Item 2")
        self.tree.insert("", "end", text="Item 3")

 

  • 0
نشر (معدل)
بتاريخ 11 ساعة قال El Sayed El Tohamy:

استبدل كلمة root بـ self

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

هذه شيفرات إضافة العناصر يدويًا

        self.tree.insert("", "end", text="Item 1")
        self.tree.insert("", "end", text="Item 2")
        self.tree.insert("", "end", text="Item 3")

 

نعم أخي كما ذكرت عند الإضافة يدويا وهذه كانت تجربتي الأولى للكود يعمل بدون مشاكل ولاكن عند إستخدام الأكسل لايعمل لايقوم لا بالنسخ و لا اللصق

هل من حل

حيث قمت بمعالجة بسيطة على هذا السطر

self.tree.insert("" , "end" , values = row)

قمت بتعديله هكذا

self.tree.insert("" , "end" , text = row ,values = row)

وعند تجربة النسخ واللصق في مكان أخر من الجهاز مثلا على المفكرة 

يظهر اللصق بهذه الطريق { السلام عليكم } 

أي يظهر ما بين هذه الأقواس

هل من معالجة لهذا الكود

ملاحظة عند إستحدام الكود بهذا الشكل 

self.tree.insert("" , "end" , text = row)

يمكن النسخ واللصق بشكل طبيعي وأيضا بها مشكلة { } لاكن السجلات في أداة Treeview فعلا موجودة ويمكن تحديدها ولاكن القيمة غير ظاهرة للمستخدم أي لأيمكن رؤيتها بالعين

تم التعديل في بواسطة Ahmed Ahmed64
  • 0
نشر
بتاريخ 3 ساعة قال Ahmed Ahmed64:

يمكن النسخ واللصق بشكل طبيعي وأيضا بها مشكلة { } لاكن السجلات في أداة Treeview فعلا موجودة ويمكن تحديدها ولاكن القيمة غير ظاهرة للمستخدم أي لأيمكن رؤيتها بالعين

هل يمكنك مشاركة الشيفرات كاملة من فضلك، بحيث أعمل عليها كما هي عندك بالضبط.

كذلك إذا توجد أي ملفات مساعدة مثل الإكسيل يرجى إرسال الملف بحتوي على عينة من البيانات للتجربة عليه.

  • 0
نشر
بتاريخ 1 ساعة قال El Sayed El Tohamy:

هل يمكنك مشاركة الشيفرات كاملة من فضلك، بحيث أعمل عليها كما هي عندك بالضبط.

كذلك إذا توجد أي ملفات مساعدة مثل الإكسيل يرجى إرسال الملف بحتوي على عينة من البيانات للتجربة عليه.

حسنا أخي إليك ملف الشفرة كاملة مع ملف اكسل للتجريب عليه

test_dG.rar

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

يظهر اللصق بهذه الطريق { السلام عليكم }

المشكلة هنا هي مشكلة ترميز encode اللغة العربية، لذلك نستخدم مكتبة pyperclip في عملية النسخ واللصق

كذلك إضافة معامل values عند إدراج insert العنصر للشجرة

# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        self.clipboard_clear()
        # self.clipboard_append(self.tree.item(item, option='text'))
        pyperclip.copy(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        # self.text = self.clipboard_get()
        self.text = pyperclip.paste()
        # self.tree.insert("", "end", text=self.text) 
        self.tree.insert("", "end", text=self.text, values=self.text) 

 

  • 0
نشر (معدل)
بتاريخ 17 دقائق مضت قال El Sayed El Tohamy:
# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        self.clipboard_clear()
        # self.clipboard_append(self.tree.item(item, option='text'))
        pyperclip.copy(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        # self.text = self.clipboard_get()
        self.text = pyperclip.paste()
        # self.tree.insert("", "end", text=self.text) 
        self.tree.insert("", "end", text=self.text, values=self.text)

أستاذي أرجو أن ترسل لي الكود كامل 

لم أفهم أين الخطأ لم ينجح كود اللصق والنسخ معي

لو سمحت إذا نجح الأمر معك قم بتعديله على الكود وإرسله  لي

تم التعديل في بواسطة Ahmed Ahmed64
  • 0
نشر
import customtkinter as ctk
import tkinter as tk
import pandas as pd
import os
import pyperclip
from tkinter import ttk , filedialog
from customtkinter import CTkInputDialog
from CTkMessagebox import CTkMessagebox

class App(ctk.CTk,tk.Tk):
    def __init__(self):
        super().__init__()
        ctk.set_appearance_mode("light")  # Modes: system (default), light, dark
        ctk.set_default_color_theme("green")  # Themes: blue (default), dark-blue, green

        self.title("CTk example")
        self.columnconfigure(0, weight = 1)
        self.rowconfigure(0, weight = 1)
# CSS ////////////////////////////////////////
        self.Font_NAME = str("Noto Kufi Arabic Medium")
        self.Button_font_size = int(12)
        self.Label_font_size = int(12)
        self.Entry_font_size = int(12)
        self.Text_Color = "#000000"
        self.Border_Frame_color = "#ff6c0b"
        self.FG_Frame_color = "#FFFFFF"
        self.Hover_Color="#FFD045"
# images **********************************************************************************************

        self.search_var = tk.StringVar()
        #----------------------------------------------------------------------------------------------
# Frame_Basis **********************************************************************************************
        self.Frame_Basis = ctk.CTkFrame(self, fg_color="#F4F4F4")
        self.Frame_Basis.grid(row=0, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_Basis.columnconfigure(0, weight = 1)
        self.Frame_Basis.rowconfigure(0, weight = 0)
        self.Frame_Basis.rowconfigure(1, weight = 0)
        self.Frame_Basis.rowconfigure(2, weight = 1)

#----------------------------------------------------------------------------------------------        
# Insert frames within a self.Frame_Basis *****************************************************************************
        
        self.Frame_A = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_A.grid(row=0, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_A.columnconfigure(0, weight = 0)
        self.Frame_A.columnconfigure(1, weight = 1)
        #self.Frame_A.rowconfigure(0, weight = 1)
# Insert tools within a Frame_A ************
        self.label_Title = ctk.CTkLabel(self.Frame_A, text="test",text_color=self.Text_Color, fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=18),justify="right")
        self.label_Title.grid(row = 0, column = 1, padx=(5, 5), pady=(5, 5), sticky="ew")
        self.label_Logo = ctk.CTkLabel(self.Frame_A, text="test" ,fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=self.Label_font_size),anchor="e")
        self.label_Logo.grid(row = 0, column = 0, padx=(5, 5), pady=(5, 5), sticky="ew") 

# Insert tools within a Frame_B ************
        self.Frame_B = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_B.grid(row=1, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_B.columnconfigure(0, weight = 1)
        self.Frame_B.columnconfigure(1, weight = 0)
        self.Frame_B.columnconfigure(2, weight = 0)
        self.Frame_B.rowconfigure(0, weight = 0)

        self.Button2 = ctk.CTkButton(self.Frame_B, text="تحميل Treeview",text_color=self.Text_Color ,compound="left",fg_color= "transparent",border_width = 1,border_color= self.Border_Frame_color,font=(self.Font_NAME,self.Button_font_size),hover_color=self.Hover_Color,command=self.lod_Treeview) 
        self.Button2.grid(row=0, column=0, pady=(5, 5),padx=(5, 2), sticky="e")

        self.optionmenu1 = ctk.CTkOptionMenu(self.Frame_B,values=["إختر ورقة العمل"],text_color=self.Text_Color, fg_color="#ffae54",button_color="#ff6c0b", font=ctk.CTkFont(family="Calibri", size=12, weight="bold"),corner_radius=20)
        self.optionmenu1.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="e")
        self.optionmenu1.configure(command=self.optionmenu_callback)

        self.Button1 = ctk.CTkButton(self.Frame_B, text="فتح ملف",text_color=self.Text_Color ,compound="left",fg_color= "transparent",border_width = 1,border_color= self.Border_Frame_color,font=(self.Font_NAME,self.Button_font_size),hover_color=self.Hover_Color,command=self.File_dialog) 
        self.Button1.grid(row=0, column=2, pady=(5, 5),padx=(5, 10), sticky="e")

        self.label_search_Nm = ctk.CTkLabel(self.Frame_B, text="البحث",text_color=self.Text_Color, fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=self.Label_font_size),anchor="w")
        self.label_search_Nm.grid(row = 1, column = 2, padx=(5, 5), pady=(5, 5), sticky="ew")
        
        self.entry1 = tk.Entry(self.Frame_B, font=ctk.CTkFont(family=self.Font_NAME, size=self.Entry_font_size),justify="right")
        self.entry1.grid(row=1, column=1, padx=(2, 10), pady=(5, 5), sticky="e")
        
        self.popup_menuA = tk.Menu(self, tearoff=0)
        self.popup_menuA.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>"))
        self.popup_menuA.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>"))
        self.popup_menuA.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>"))
        self.entry1.bind("<Button-3>", self.show_popup_menu)
        
# Insert tools within a Frame_C ************
        self.Frame_C = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_C.grid(row=2, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_C.columnconfigure(0, weight = 1)

#Treeview         
        self.tree = ttk.Treeview(self.Frame_C)
        self.tree.grid(row=0, column=0, padx=(5, 5), pady=(5, 5),sticky='nsew')
        self.tree.bind('<Button-3>', self.popup_menu)        
# القائمة        
        self.popup1 = tk.Menu(self.tree, tearoff=0)
        self.popup1.add_command( command=self.it_copy, label="Copy")
        self.popup1.add_command( command=self.it_paste, label="paste")
# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        self.clipboard_clear()
        # self.clipboard_append(self.tree.item(item, option='text'))
        pyperclip.copy(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        # self.text = self.clipboard_get()
        self.text = pyperclip.paste()
        # self.tree.insert("", "end", text=self.text) 
        self.tree.insert("", "end", text=self.text, values=self.text) 

    def File_dialog(self):
        self.file_name = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"),("all files", "*.*")))
        self.df = pd.ExcelFile(self.file_name)
        self.optionmenu1.configure(values = self.df.sheet_names)

        if self.file_name:
            self.file_name = os.path.basename(self.file_name)
    
    def optionmenu_callback(self,value):
        self.vq = value
        return self.vq
    
    def lod_Treeview(self):
        if hasattr(self, 'file_name') and self.file_name:
            self.df = pd.read_excel(self.file_name,sheet_name=self.vq,header=None)
            
            self.A =  self.df.iloc[1::1, [0]]
            self.A1 = pd.DataFrame(self.A )
            self.tree["column"]=list(self.A1.columns)
            self.tree["show"] = "headings"
            for column in self.tree["column"]:
                self.tree.heading(column , text=column)
            df_rows = self.A1.to_numpy().tolist()
            for row in df_rows:
                self.tree.insert("" , "end" , text = row ,values = row)
        else:
             CTkMessagebox(title="خطأ",message="أرجو فتح ملف أولا",icon="cancel",option_1="OK",  font=ctk.CTkFont(family="Noto Kufi Arabic Medium", size=14),justify="center")

# إظهر القائمة

    def show_popup_menu(self,event):
        self.popup_menuA.post(event.x_root, event.y_root)

    def popup_menu(self,event):
        self.tree.identify_row(event.y)
        self.popup1.post(event.x_root, event.y_root) 
app = App()
app.mainloop()

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

  • 0
نشر
بتاريخ 4 دقائق مضت قال El Sayed El Tohamy:
import customtkinter as ctk
import tkinter as tk
import pandas as pd
import os
import pyperclip
from tkinter import ttk , filedialog
from customtkinter import CTkInputDialog
from CTkMessagebox import CTkMessagebox

class App(ctk.CTk,tk.Tk):
    def __init__(self):
        super().__init__()
        ctk.set_appearance_mode("light")  # Modes: system (default), light, dark
        ctk.set_default_color_theme("green")  # Themes: blue (default), dark-blue, green

        self.title("CTk example")
        self.columnconfigure(0, weight = 1)
        self.rowconfigure(0, weight = 1)
# CSS ////////////////////////////////////////
        self.Font_NAME = str("Noto Kufi Arabic Medium")
        self.Button_font_size = int(12)
        self.Label_font_size = int(12)
        self.Entry_font_size = int(12)
        self.Text_Color = "#000000"
        self.Border_Frame_color = "#ff6c0b"
        self.FG_Frame_color = "#FFFFFF"
        self.Hover_Color="#FFD045"
# images **********************************************************************************************

        self.search_var = tk.StringVar()
        #----------------------------------------------------------------------------------------------
# Frame_Basis **********************************************************************************************
        self.Frame_Basis = ctk.CTkFrame(self, fg_color="#F4F4F4")
        self.Frame_Basis.grid(row=0, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_Basis.columnconfigure(0, weight = 1)
        self.Frame_Basis.rowconfigure(0, weight = 0)
        self.Frame_Basis.rowconfigure(1, weight = 0)
        self.Frame_Basis.rowconfigure(2, weight = 1)

#----------------------------------------------------------------------------------------------        
# Insert frames within a self.Frame_Basis *****************************************************************************
        
        self.Frame_A = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_A.grid(row=0, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_A.columnconfigure(0, weight = 0)
        self.Frame_A.columnconfigure(1, weight = 1)
        #self.Frame_A.rowconfigure(0, weight = 1)
# Insert tools within a Frame_A ************
        self.label_Title = ctk.CTkLabel(self.Frame_A, text="test",text_color=self.Text_Color, fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=18),justify="right")
        self.label_Title.grid(row = 0, column = 1, padx=(5, 5), pady=(5, 5), sticky="ew")
        self.label_Logo = ctk.CTkLabel(self.Frame_A, text="test" ,fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=self.Label_font_size),anchor="e")
        self.label_Logo.grid(row = 0, column = 0, padx=(5, 5), pady=(5, 5), sticky="ew") 

# Insert tools within a Frame_B ************
        self.Frame_B = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_B.grid(row=1, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_B.columnconfigure(0, weight = 1)
        self.Frame_B.columnconfigure(1, weight = 0)
        self.Frame_B.columnconfigure(2, weight = 0)
        self.Frame_B.rowconfigure(0, weight = 0)

        self.Button2 = ctk.CTkButton(self.Frame_B, text="تحميل Treeview",text_color=self.Text_Color ,compound="left",fg_color= "transparent",border_width = 1,border_color= self.Border_Frame_color,font=(self.Font_NAME,self.Button_font_size),hover_color=self.Hover_Color,command=self.lod_Treeview) 
        self.Button2.grid(row=0, column=0, pady=(5, 5),padx=(5, 2), sticky="e")

        self.optionmenu1 = ctk.CTkOptionMenu(self.Frame_B,values=["إختر ورقة العمل"],text_color=self.Text_Color, fg_color="#ffae54",button_color="#ff6c0b", font=ctk.CTkFont(family="Calibri", size=12, weight="bold"),corner_radius=20)
        self.optionmenu1.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="e")
        self.optionmenu1.configure(command=self.optionmenu_callback)

        self.Button1 = ctk.CTkButton(self.Frame_B, text="فتح ملف",text_color=self.Text_Color ,compound="left",fg_color= "transparent",border_width = 1,border_color= self.Border_Frame_color,font=(self.Font_NAME,self.Button_font_size),hover_color=self.Hover_Color,command=self.File_dialog) 
        self.Button1.grid(row=0, column=2, pady=(5, 5),padx=(5, 10), sticky="e")

        self.label_search_Nm = ctk.CTkLabel(self.Frame_B, text="البحث",text_color=self.Text_Color, fg_color="transparent", font=ctk.CTkFont(family=self.Font_NAME, size=self.Label_font_size),anchor="w")
        self.label_search_Nm.grid(row = 1, column = 2, padx=(5, 5), pady=(5, 5), sticky="ew")
        
        self.entry1 = tk.Entry(self.Frame_B, font=ctk.CTkFont(family=self.Font_NAME, size=self.Entry_font_size),justify="right")
        self.entry1.grid(row=1, column=1, padx=(2, 10), pady=(5, 5), sticky="e")
        
        self.popup_menuA = tk.Menu(self, tearoff=0)
        self.popup_menuA.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>"))
        self.popup_menuA.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>"))
        self.popup_menuA.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>"))
        self.entry1.bind("<Button-3>", self.show_popup_menu)
        
# Insert tools within a Frame_C ************
        self.Frame_C = ctk.CTkFrame(self.Frame_Basis , border_width = 1,border_color= self.Border_Frame_color,fg_color = self.FG_Frame_color)
        self.Frame_C.grid(row=2, column=0, pady=(5, 5),padx=(5, 5), sticky="ewsn")
        self.Frame_C.columnconfigure(0, weight = 1)

#Treeview         
        self.tree = ttk.Treeview(self.Frame_C)
        self.tree.grid(row=0, column=0, padx=(5, 5), pady=(5, 5),sticky='nsew')
        self.tree.bind('<Button-3>', self.popup_menu)        
# القائمة        
        self.popup1 = tk.Menu(self.tree, tearoff=0)
        self.popup1.add_command( command=self.it_copy, label="Copy")
        self.popup1.add_command( command=self.it_paste, label="paste")
# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        self.clipboard_clear()
        # self.clipboard_append(self.tree.item(item, option='text'))
        pyperclip.copy(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        # self.text = self.clipboard_get()
        self.text = pyperclip.paste()
        # self.tree.insert("", "end", text=self.text) 
        self.tree.insert("", "end", text=self.text, values=self.text) 

    def File_dialog(self):
        self.file_name = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"),("all files", "*.*")))
        self.df = pd.ExcelFile(self.file_name)
        self.optionmenu1.configure(values = self.df.sheet_names)

        if self.file_name:
            self.file_name = os.path.basename(self.file_name)
    
    def optionmenu_callback(self,value):
        self.vq = value
        return self.vq
    
    def lod_Treeview(self):
        if hasattr(self, 'file_name') and self.file_name:
            self.df = pd.read_excel(self.file_name,sheet_name=self.vq,header=None)
            
            self.A =  self.df.iloc[1::1, [0]]
            self.A1 = pd.DataFrame(self.A )
            self.tree["column"]=list(self.A1.columns)
            self.tree["show"] = "headings"
            for column in self.tree["column"]:
                self.tree.heading(column , text=column)
            df_rows = self.A1.to_numpy().tolist()
            for row in df_rows:
                self.tree.insert("" , "end" , text = row ,values = row)
        else:
             CTkMessagebox(title="خطأ",message="أرجو فتح ملف أولا",icon="cancel",option_1="OK",  font=ctk.CTkFont(family="Noto Kufi Arabic Medium", size=14),justify="center")

# إظهر القائمة

    def show_popup_menu(self,event):
        self.popup_menuA.post(event.x_root, event.y_root)

    def popup_menu(self,event):
        self.tree.identify_row(event.y)
        self.popup1.post(event.x_root, event.y_root) 
app = App()
app.mainloop()

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

أستاذي المعذرة إن أكثرت عليك بالأسئلة

فعلا النسخ واللصق يعمل على الشجرة 

ولاكن أستاذي جرب أن تنسخ تم تلصق في مفكرة على الجهاز سوف تلاحظ أن الأسم بين القوسين لاتزال قائمة فما الحل في ذلك

  • 0
نشر (معدل)
بتاريخ 14 ساعة قال Ahmed Ahmed64:

ولاكن أستاذي جرب أن تنسخ تم تلصق في مفكرة على الجهاز سوف تلاحظ أن الأسم بين القوسين لاتزال قائمة فما الحل في ذلك

نعم يتم استخدام الأقواس المعكوفة {} لإحاطة النصوص غير اللغة الإنجليزية،

لتجنب هذه المشكلة سنقوم بعمل خوارزمية إضافية، بحيث تتم بالخطوات التالية:

1- النسخ من الشجرة

2- إزالة الأقواس من النص المنسوخ

3- إنشاء أداة إدخال مؤقتة ونقوم بإضافة النص إليها ثم نقوم بالنسخ من هذه الأداة،

السبب، أن النسخ من أداة الإدخال لا يسبب نفس المشكلة

قم بتعديل الوظيفتين التاليتين فقط

# النسخ
    def it_copy(self):
        item = self.tree.selection()[0]
        # قراءة النص من العنصر
        text = self.tree.item(item, option='text')
        # استبدال الأقواس المعكوفة بنص فارغ
        text = text.replace("{", "").replace("}", "")

        # إنشاء أداة إدخال مؤقتة لاستخدامها في عملية النسخ والقص لتفادى المشاكل
        tempEntry = tk.Entry(self)
        tempEntry.insert(0, text) 
        tempEntry.select_range(0, "end")
        tempEntry.event_generate("<<Copy>>")
        
        #pyperclip.copy(self.tree.item(item, option='text'))
# اللصق
    def it_paste(self):
        self.text = self.clipboard_get()
        #self.text = pyperclip.paste()
        self.tree.insert("", "end", text=self.text, values=[self.text]) 

 

تم التعديل في بواسطة El Sayed El Tohamy

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...