我想通过以下代码在Rightkey菜单中实现“剪切”:
self.entry_title = entry(frm, RIGHT, self.title, width = 58)
def menubarCut(self):
if not self.entry_title.selection_present():
showerror('***', 'No text selected')
else:
text = self.entry_title.selection_get()
self.entry_title.selection_clear()
self.clipboard_clear()
self.clipboard_append(text)
然而,menubarCut返回“复制”而不是“剪切”的效果。也就是说,上面代码返回的结果与以下代码返回的结果相同:
self.entry_title = entry(frm, RIGHT, self.title, width = 58)
def menubarCopy(self):
if not self.entry_title.selection_present():
showerror('***', 'No text selected')
else:
text = self.entry_title.selection_get()
self.clipboard_clear()
self.clipboard_append(text)
似乎self.entry_title.selection_clear()
没有效果。为什么会这样?我该如何解决这个问题?
答案 0 :(得分:1)
根据@ BryanOakley对tkinter copy-pasting to Entry doesn't remove selected text的回答,我猜这就是你想要的:
def menubarCut(self):
if self.entry_title.selection_present():
text = self.entry_title.selection_get()
self.entry_title.delete("sel.first", "sel.last")
self.clipboard_clear()
self.clipboard_append(text)
else:
showerror('***', 'No text selected')
selection_clear()
方法清除选择行为(突出显示)而不是选择的实际文本。仅供参考,这是我为测试这个而创建的MCVE:
import sys
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.entry_title = tk.Entry(master, width=50)
self.entry_title.pack()
self.entry_title.bind('<Escape>', self.event_handler)
def menubarCut(self):
if self.entry_title.selection_present():
text = self.entry_title.selection_get()
self.entry_title.delete("sel.first", "sel.last")
self.clipboard_clear()
self.clipboard_append(text)
else:
print('No text selected', file=sys.stdderr)
def event_handler(self, event):
self.menubarCut()
root = tk.Tk()
Application(root)
root.mainloop()