簡體   English   中英

復制和粘貼 tkinter 文本小部件上顯示的文本

[英]Copying and pasting text displayed on tkinter text widget

我有一個帶有顯示“ABCDEF”的文本小部件的 tkinter 界面。 我希望能夠分別使用 ctrl+c 和 ctrl+v 復制和粘貼此文本。 我還想防止任何其他鍵更改文本(退格鍵、空格鍵,基本上除了 ctrl+c 和 ctrl+v 之外的任何鍵)。

為了完成這項任務,我嘗試了一種在此處找到的方法(最后一段代碼): https ://www.delftstack.com/howto/python-tkinter/how-to-make-tkinter-text-widget-read- 只要/

此代碼不允許通過快捷方式復制和粘貼。 如下所示。 我想知道如何使用快捷方式復制和粘貼文本小部件顯示的文本,同時也不允許其他鍵更改文本。 任何幫助,將不勝感激。

import tkinter as tk


def ctrlEvent(event):
    if 12 == event.state and event.keysym == 'C':
        return
    else:
        return "break"


root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda e: ctrlEvent(e))
readOnlyText.pack()

root.mainloop()

您擁有代碼的方式已經不允許其他鍵編輯文本框。 下面有對<ctrl-c>的檢測並添加了對<ctrl-v>的檢測。 它還具有每個功能。

在文本框中使用方法selection_get()從文本框中獲取突出顯示的文本。

然后清除剪貼板並使用root.clipboard_clear()root.clipboard_append(content)從文本框中附加所需的內容。

然后使用root.selection_get(selection='CLIPBOARD')從剪貼板中檢索項目。

import tkinter as tk


def ctrlEvent(event):
    if event.state == 4 and event.keysym == 'c':
        content = readOnlyText.selection_get()
        root.clipboard_clear()
        root.clipboard_append(content)
        return
    elif event.state == 4 and event.keysym == 'v':
        readOnlyText.insert('end', root.selection_get(selection='CLIPBOARD'))
    else:
        return


root = tk.Tk()
readOnlyText = tk.Text(root)
readOnlyText.insert(1.0, "ABCDEF")
readOnlyText.bind("<Key>", lambda e: ctrlEvent(e))
readOnlyText.pack()

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM