Почему selection_clear () в записи tkinter недействителен? - PullRequest
0 голосов
/ 14 мая 2018

Я хочу реализовать «Вырезать» в меню «Правая клавиша» с помощью следующего кода:

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() не имеет никакого эффекта.Почему это происходит?Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 14 мая 2018

Основываясь на ответе @ BryanOakley на tkinter, вставка копии в Entry не удаляет выделенный текст , я думаю, это то, что вы хотите:

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()
...