亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python / Tkinter - 從另一個功能單擊按鈕時選擇所有文本內容并將其復制到剪貼板

Python / Tkinter - 從另一個功能單擊按鈕時選擇所有文本內容并將其復制到剪貼板

侃侃爾雅 2023-10-18 16:34:17
最近幾天我剛剛開始自學 Python 來進行一些應用程序編程,并且之前有使用 PHP 開發網站的經驗。我一直在構建一個程序,它將解析信息列表,構建收集的變量數組,然后在新的 Tkinter Toplevel 窗口中加載并使用這些變量填充 html 模板。新窗口是由根窗口中的菜單欄命令調用的函數創建的。它包含一個帶有滾動條的文本框和一些按鈕,允許用戶選擇所有文本,將其復制到剪貼板,然后關閉窗口。我遇到的問題是,我不知道在從其他函數中調用 select 和 copy 函數時如何正確引用所有內容,而且我相信這對于精通 Python 的人來說可能是一個簡單的解決方案。如果我像只在一個窗口中工作一樣精簡代碼,那么一切都會按預期工作:import tkinter as tkdef clipit():    textpop.clipboard_clear()    textpop.event_generate("<<TextModified>>")    textpop.clipboard_append(textarea.get('1.0', 'end'))    textpop.update()    def textselect():    textpop.event_generate("<<TextModified>>")    textarea.tag_add('sel', "1.0", 'end-1c')textpop = tk.Tk()textarea = tk.Text(textpop, wrap="none")textarea.pack(side="left", fill="both", padx=20, pady=20)textarea.insert("1.0", "This is a test - Try to select all and copy!")exitbutton = tk.Button(textpop, text="Close", command = textpop.destroy)exitbutton.pack(side="right", padx=(5,20), pady=(0,20))copybutton = tk.Button(textpop, text="Copy", command = clipit)copybutton.pack(side="right",padx=5, pady=(0,20))selectbutton = tk.Button(textpop, text="Select All", command = textselect)selectbutton.pack(side="right",padx=5, pady=(0,20))textarea.focus()textpop.mainloop()如果我嘗試做同樣的事情,但是從函數內部(其中 textpop = tk.Toplevel()),它不再起作用。我嘗試傳遞對函數(父函數、小部件等)的各種引用并相應地修改函數代碼,但沒有運氣讓它工作。例如:import tkinter as tkdef clipit(parent,textwidget):    parent.clipboard_clear()    parent.event_generate("<<TextModified>>")    parent.clipboard_append(textwidget.get('1.0', 'end'))    parent.update()    def textselect(parent,textwidget):    parent.event_generate("<<TextModified>>")    parent.textwidget.tag_add('sel', "1.0", 'end-1c')def textwindow(title,content):    textpop = tk.Toplevel()    textpop.title(title)    textarea = tk.Text(textpop, wrap="none")    textarea.pack(side="left", fill="both", padx=20, pady=20)    textarea.insert("1.0", content)在我的主腳本(以及此示例代碼)中,單擊“全選”按鈕將導致以下錯誤:AttributeError:“Toplevel”對象沒有屬性“textwidget”是否有一些簡單的東西我只是錯過了,因為我是這門語言的新手?編輯:為了清楚起見,根據布萊恩的評論修改了第二個示例。
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

在構建功能示例腳本以幫助人們為我解決此問題的過程中,我想我找到了罪魁禍首:

parent.textwidget.tag_add('sel', '1.0', 'end-1c')

看起來我的引用可能有點過于具體,因為刪除嘗試的父引用解決了選擇文本小部件內容的問題。我還必須為 textwidget 添加焦點調用才能使其工作,我也將其放入函數中:

def textselect(parent,textwidget):
    parent.event_generate("<<TextModified>>")
    textwidget.focus()
    textwidget.tag_add('sel', '1.0', 'end')

一旦我完成了這一切,我還意識到選擇文本無論如何都是多余的,而且更多的是視覺上的事情,因為復制功能將復制文本框的全部內容,無論它是否突出顯示。

雖然不能 100% 確定這是實現這一切的最佳方法,但它確實有效。如果誰有更好的方法,歡迎留言!


查看完整回答
反對 回復 2023-10-18
  • 1 回答
  • 0 關注
  • 323 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號