第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

侃侃爾雅 2023-10-18 16:34:17
最近幾天我剛剛開始自學(xué) Python 來進(jìn)行一些應(yīng)用程序編程,并且之前有使用 PHP 開發(fā)網(wǎng)站的經(jīng)驗(yàn)。我一直在構(gòu)建一個程序,它將解析信息列表,構(gòu)建收集的變量數(shù)組,然后在新的 Tkinter Toplevel 窗口中加載并使用這些變量填充 html 模板。新窗口是由根窗口中的菜單欄命令調(diào)用的函數(shù)創(chuàng)建的。它包含一個帶有滾動條的文本框和一些按鈕,允許用戶選擇所有文本,將其復(fù)制到剪貼板,然后關(guān)閉窗口。我遇到的問題是,我不知道在從其他函數(shù)中調(diào)用 select 和 copy 函數(shù)時如何正確引用所有內(nèi)容,而且我相信這對于精通 Python 的人來說可能是一個簡單的解決方案。如果我像只在一個窗口中工作一樣精簡代碼,那么一切都會按預(yù)期工作: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()如果我嘗試做同樣的事情,但是從函數(shù)內(nèi)部(其中 textpop = tk.Toplevel()),它不再起作用。我嘗試傳遞對函數(shù)(父函數(shù)、小部件等)的各種引用并相應(yīng)地修改函數(shù)代碼,但沒有運(yùn)氣讓它工作。例如: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)在我的主腳本(以及此示例代碼)中,單擊“全選”按鈕將導(dǎo)致以下錯誤:AttributeError:“Toplevel”對象沒有屬性“textwidget”是否有一些簡單的東西我只是錯過了,因?yàn)槲沂沁@門語言的新手?編輯:為了清楚起見,根據(jù)布萊恩的評論修改了第二個示例。
查看完整描述

1 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊

在構(gòu)建功能示例腳本以幫助人們?yōu)槲医鉀Q此問題的過程中,我想我找到了罪魁禍?zhǔn)祝?/p>

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

看起來我的引用可能有點(diǎn)過于具體,因?yàn)閯h除嘗試的父引用解決了選擇文本小部件內(nèi)容的問題。我還必須為 textwidget 添加焦點(diǎn)調(diào)用才能使其工作,我也將其放入函數(shù)中:

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

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

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


查看完整回答
反對 回復(fù) 2023-10-18
  • 1 回答
  • 0 關(guān)注
  • 352 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號