Вставка в виджет Tkinter Text - PullRequest
2 голосов
/ 05 августа 2011

Я использую строку ниже, чтобы вставить текст в виджет Tkinter Text.Тем не менее, я хотел бы иметь возможность изменять текст до его вставки.Я специально пытаюсь удалить все, что может привести к созданию новой строки (например, return, '\ n').Итак, как бы я получил скопированный текст в виде строки, а затем, как бы я установить скопированный текст с новой строкой.

Линия:

tktextwid.event_generate('<<Paste>>')

1 Ответ

4 голосов
/ 06 августа 2011

Вам не нужно использовать event_generate, если вы собираетесь предварительно обработать данные.Вам просто нужно захватить содержимое буфера обмена, манипулировать данными, а затем вставить их в виджет.Чтобы полностью имитировать вставку, вам также нужно удалить выделение, если оно есть.

Вот краткий пример, едва протестированный:

import Tkinter as tk
from Tkinter import TclError

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.text = tk.Text(self, width=40, height=8)
        self.button = tk.Button(self, text="do it!", command=self.doit)
        self.button.pack(side="top")
        self.text.pack(side="bottom", fill="both", expand=True)
        self.doit()

    def doit(self, *args):
        # get the clipboard data, and replace all newlines
        # with the literal string "\n"
        clipboard = self.clipboard_get()
        clipboard = clipboard.replace("\n", "\\n")

        # delete the selected text, if any
        try:
            start = self.text.index("sel.first")
            end = self.text.index("sel.last")
            self.text.delete(start, end)
        except TclError, e:
            # nothing was selected, so paste doesn't need
            # to delete anything
            pass

        # insert the modified clipboard contents
        self.text.insert("insert", clipboard)

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

Когда вы запускаете этот код и нажимаете «сделать это»!»кнопка, он заменит выбранный текст на то, что было в буфере обмена после преобразования всех новых строк в буквенную последовательность \n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...