Ahmed Ahmed64 نشر 21 يناير أرسل تقرير نشر 21 يناير (معدل) السلام عليكم استخدمت في تصميم الواجهة مكتبة tkinter لدي أداة Treeview حاولت كتابة شفرة تقوم بإظهار قائمة النسخ واللصق عند الضغط بالماوس self.popup_menu = tk.Menu(self.frame, tearoff=0) self.popup_menu.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>")) self.popup_menu.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>")) self.popup_menu.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>")) self.tree.bind("<Button-3>", self.show_popup_menu) def show_popup_menu(self,event): self.popup_menu.post(event.x_root, event.y_root) المشكلة أن القائمة تظهر عند الضغط ولاكن لا يتم النسخ من السجل أو الصف المحدد في Treeview أرجو توضيح أن يتم التعديل في كتابة الكود حاولت مع هذه الشفرة ولم تنجح def popup(self, event): iid = self.tree.identify_row(event.y) if iid: self.tree.selection_set(iid) self.contextMenu.post(event.x_root, event.y_root) else: pass تم التعديل في 21 يناير بواسطة Ahmed Ahmed64 اقتباس
0 El Sayed El Tohamy نشر 21 يناير أرسل تقرير نشر 21 يناير (معدل) ربما تحتاج استبدال هذه الأسطر self.popup_menu.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>")) self.popup_menu.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>")) self.popup_menu.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>")) بهذه self.popup_menu.add_command(label="Cut", command=lambda: self.cut_item()) self.popup_menu.add_command(label="Copy", command=lambda: self.copy_item()) self.popup_menu.add_command(label="Paste", command=lambda: self.paste_item()) def cut_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) tree.delete(item) def copy_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) بالتأكيد يمكننا تحسين الكود عن طريق دمج الوظيفتين copy_item و cut_item ووضع معامل لتحديد المطلوب هل هو قص أو نسخ، ولكن فضلت كتابتها بهذا الشكل لتكون الصورة واضحة. مع استخدام def show_popup_menu(self,event): self.popup_menu.post(event.x_root, event.y_root) تم التعديل في 21 يناير بواسطة El Sayed El Tohamy 1 اقتباس
0 Ahmed Ahmed64 نشر 22 يناير الكاتب أرسل تقرير نشر 22 يناير بتاريخ 11 ساعة قال El Sayed El Tohamy: ربما تحتاج استبدال هذه الأسطر self.popup_menu.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>")) self.popup_menu.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>")) self.popup_menu.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>")) بهذه self.popup_menu.add_command(label="Cut", command=lambda: self.cut_item()) self.popup_menu.add_command(label="Copy", command=lambda: self.copy_item()) self.popup_menu.add_command(label="Paste", command=lambda: self.paste_item()) def cut_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) tree.delete(item) def copy_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) بالتأكيد يمكننا تحسين الكود عن طريق دمج الوظيفتين copy_item و cut_item ووضع معامل لتحديد المطلوب هل هو قص أو نسخ، ولكن فضلت كتابتها بهذا الشكل لتكون الصورة واضحة. مع استخدام def show_popup_menu(self,event): self.popup_menu.post(event.x_root, event.y_root) شكرا أخي هل تقصد هذا الكود له علاقة بباقي الكود الذي أرسلته حضرتك أم كود أخر لأن في الحقيقة القائمة تظهر ولا يتم تنفيذ أمر النسخ كما حدث معي في المرة الأولى def show_popup_menu(self,event): self.popup_menu.post(event.x_root, event.y_root) اقتباس
0 El Sayed El Tohamy نشر 22 يناير أرسل تقرير نشر 22 يناير (معدل) سأرسل لك الشيفرة كاملة import tkinter as tk from tkinter import ttk root = tk.Tk() tree = ttk.Treeview(root) tree.pack() tree.insert("", "end", text="Item 1") tree.insert("", "end", text="Item 2") tree.insert("", "end", text="Item 3") popup = tk.Menu(tree, tearoff=0) popup.add_command(label="Copy", command=lambda: copy_item()) popup.add_command(label="Paste", command=lambda: paste_item()) def copy_item(): item = tree.selection()[0] # تنظيف الذاكرة root.clipboard_clear() # نسخ عنوان العنصر إلى الذكرة root.clipboard_append(tree.item(item, option="text")) # تعريف وظيفة لعملية اللصق def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) # تعريف وظيفة لإظهار القائمة def show_popup(event): # تحديد الصف تحت مؤشر الفأرة row = tree.identify_row(event.y) # في حالة أن الصف ليس فارغًا if row: # نقوم باختيار الصف من الشجرة tree.selection_set(row) # إظهار القائمة popup.post(event.x_root, event.y_root) tree.bind("<Button-3>", show_popup) root.mainloop() يمكنك استخدام الشيفرة كما هي أو وضعها داخل تصنيف class تم التعديل في 22 يناير بواسطة El Sayed El Tohamy اقتباس
0 Ahmed Ahmed64 نشر 22 يناير الكاتب أرسل تقرير نشر 22 يناير بتاريخ 5 ساعة قال El Sayed El Tohamy: سأرسل لك الشيفرة كاملة import tkinter as tk from tkinter import ttk root = tk.Tk() tree = ttk.Treeview(root) tree.pack() tree.insert("", "end", text="Item 1") tree.insert("", "end", text="Item 2") tree.insert("", "end", text="Item 3") popup = tk.Menu(tree, tearoff=0) popup.add_command(label="Copy", command=lambda: copy_item()) popup.add_command(label="Paste", command=lambda: paste_item()) def copy_item(): item = tree.selection()[0] # تنظيف الذاكرة root.clipboard_clear() # نسخ عنوان العنصر إلى الذكرة root.clipboard_append(tree.item(item, option="text")) # تعريف وظيفة لعملية اللصق def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) # تعريف وظيفة لإظهار القائمة def show_popup(event): # تحديد الصف تحت مؤشر الفأرة row = tree.identify_row(event.y) # في حالة أن الصف ليس فارغًا if row: # نقوم باختيار الصف من الشجرة tree.selection_set(row) # إظهار القائمة popup.post(event.x_root, event.y_root) tree.bind("<Button-3>", show_popup) root.mainloop() يمكنك استخدام الشيفرة كما هي أو وضعها داخل تصنيف class استفسار أستاذي بخصوص هذا السطر popup.post(event.x_root, event.y_root) استبدلت root بكلمة self التي تعود على البرنامج ولاكن جدث خطأ AttributeError: 'Event' object has no attribute 'x_self' اقتباس
0 El Sayed El Tohamy نشر 22 يناير أرسل تقرير نشر 22 يناير أنت أنشات تصنيفًا class وتريد وضع الشيفرات بداخله؟ هل التصنيف يرث من أي تصنيف آخر؟ يرجى مشاركة الأجزاء الأولى من الشيفرات الخاصة بك، بحيث يظهر إنشاء التصنيف والباني __init__ 1 اقتباس
0 Ahmed Ahmed64 نشر 22 يناير الكاتب أرسل تقرير نشر 22 يناير (معدل) بتاريخ 21 دقائق مضت قال El Sayed El Tohamy: أنت أنشات تصنيفًا class وتريد وضع الشيفرات بداخله؟ هل التصنيف يرث من أي تصنيف آخر؟ يرجى مشاركة الأجزاء الأولى من الشيفرات الخاصة بك، بحيث يظهر إنشاء التصنيف والباني __init__ self.tree = ttk.Treeview(self.Frame_C) self.tree.grid(row=0, column=0, sticky='nsew') self.tree.insert("", "end", text="Item 1") self.tree.insert("", "end", text="Item 2") self.tree.insert("", "end", text="Item 3") self.popup = tk.Menu(self, tearoff=0) self.popup.add_command(label="Copy", command=lambda: self.copy_item()) self.popup.add_command(label="Paste", command=lambda: self.paste_item()) self.tree.bind("<Button-3>", self.show_popup) ttk.Treeview داخل فريم self.Frame_C و self.Frame_C داخل فريم self.Frame_Basis و self.Frame_Basis ترث من self مسمى الكلاس app class App(ctk.CTk,tk.Tk): def __init__(self): super().__init__() تم التعديل في 22 يناير بواسطة Ahmed Ahmed64 اقتباس
0 El Sayed El Tohamy نشر 22 يناير أرسل تقرير نشر 22 يناير في البداية لن تحتاج للوراثة غير من التصنيف tk.Tk فقط، هذه الشيفرة كاملة بعد وضعها داخل تصنيف class يسمى app import tkinter as tk from tkinter import ttk class app(tk.Tk): def __init__(self) -> None: super().__init__() // لاحظ أن الكائن التالي يحتاج مكتبة // ttk self.tree = ttk.Treeview(self) self.tree.pack() self.tree.insert("", "end", text="Item 1") self.tree.insert("", "end", text="Item 2") self.tree.insert("", "end", text="Item 3") self.popup = tk.Menu(self.tree, tearoff=0) self.popup.add_command(label="Copy", command=lambda: self.copy_item()) self.popup.add_command(label="Paste", command=lambda: self.paste_item()) self.tree.bind("<Button-3>", self.show_popup) def copy_item(self): item = self.tree.selection()[0] self.clipboard_clear() self.clipboard_append(self.tree.item(item, option="text")) def paste_item(self): text = self.clipboard_get() self.tree.insert("", "end", text=text) def show_popup(self, event): row = self.tree.identify_row(event.y) if row: self.tree.selection_set(row) self.popup.post(event.x_root, event.y_root) form = app() form.mainloop() 1 اقتباس
0 Ahmed Ahmed64 نشر 22 يناير الكاتب أرسل تقرير نشر 22 يناير بتاريخ 8 دقائق مضت قال El Sayed El Tohamy: في البداية لن تحتاج للوراثة غير من التصنيف tk.Tk فقط، هذه الشيفرة كاملة بعد وضعها داخل تصنيف class يسمى app import tkinter as tk from tkinter import ttk class app(tk.Tk): def __init__(self) -> None: super().__init__() // لاحظ أن الكائن التالي يحتاج مكتبة // ttk self.tree = ttk.Treeview(self) self.tree.pack() self.tree.insert("", "end", text="Item 1") self.tree.insert("", "end", text="Item 2") self.tree.insert("", "end", text="Item 3") self.popup = tk.Menu(self.tree, tearoff=0) self.popup.add_command(label="Copy", command=lambda: self.copy_item()) self.popup.add_command(label="Paste", command=lambda: self.paste_item()) self.tree.bind("<Button-3>", self.show_popup) def copy_item(self): item = self.tree.selection()[0] self.clipboard_clear() self.clipboard_append(self.tree.item(item, option="text")) def paste_item(self): text = self.clipboard_get() self.tree.insert("", "end", text=text) def show_popup(self, event): row = self.tree.identify_row(event.y) if row: self.tree.selection_set(row) self.popup.post(event.x_root, event.y_root) form = app() form.mainloop() نعم أخي لقد نجحت الشفرة وفي الحقيقة احتجت في الوراثة من التصنيف customtkinter لأني استخدمت هذه المكتبة في تصميم الواجهة جزاك الله خيراً أستاذي هل من الممكن التعديل عليه قليلا فقد كنت أحاول ولاكن دون جدوى أحتاج للتعديل على الشفره لكي تتمشى أيضا مع أداة tk.Entry اقتباس
0 El Sayed El Tohamy نشر 22 يناير أرسل تقرير نشر 22 يناير يمكنك إضافة أي أداة مهما كانت المكتبة الخاصة بها، يتم ذلك داخل الباني __init__ بحيث تجعل المعامل الأول للأداة هو self مثل المثال التالي: class app(tk.Tk): def __init__(self) -> None: super().__init__() self.tree = ttk.Treeview(self) self.tree.pack() self.entry2 = tk.Entry(self) self.entry2.pack() اقتباس
0 Ahmed Ahmed64 نشر 22 يناير الكاتب أرسل تقرير نشر 22 يناير بتاريخ 25 دقائق مضت قال El Sayed El Tohamy: يمكنك إضافة أي أداة مهما كانت المكتبة الخاصة بها، يتم ذلك داخل الباني __init__ بحيث تجعل المعامل الأول للأداة هو self مثل المثال التالي: class app(tk.Tk): def __init__(self) -> None: super().__init__() self.tree = ttk.Treeview(self) self.tree.pack() self.entry2 = tk.Entry(self) self.entry2.pack() أستاذي لم يكن هذا سؤال يبدو أن السؤال لم يكن مفهوم لديك سؤالي من خلال شيفرة النسخ واللصق كيف أضيف عليهم أداة الإدخال Entry اقتباس
0 El Sayed El Tohamy نشر 22 يناير أرسل تقرير نشر 22 يناير (معدل) ما المقصود بإضافة أداة الإدخال عليهم؟ تقصد تمكين أداة Entry من النسخ واللصق مثل TreeView؟ إذا كان هذا ما تقصده، فستحتاج لتكرار نفس الخطوات للأداة Entry تم التعديل في 22 يناير بواسطة El Sayed El Tohamy اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم
استخدمت في تصميم الواجهة مكتبة tkinter
لدي أداة Treeview حاولت كتابة شفرة تقوم بإظهار قائمة النسخ واللصق عند الضغط بالماوس
المشكلة أن القائمة تظهر عند الضغط ولاكن لا يتم النسخ من السجل أو الصف المحدد في Treeview
أرجو توضيح أن يتم التعديل في كتابة الكود
حاولت مع هذه الشفرة ولم تنجح
11 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.