最近几天我刚刚开始自学 Python 来进行一些应用程序编程,并且之前有使用 PHP 开发网站的经验。我一直在构建一个程序,它将解析信息列表,构建收集的变量数组,然后在新的 Tkinter Toplevel 窗口中加载并使用这些变量填充 html 模板。新窗口是由根窗口中的菜单栏命令调用的函数创建的。它包含一个带有滚动条的文本框和一些按钮,允许用户选择所有文本,将其复制到剪贴板,然后关闭窗口。
我遇到的问题是,我不知道在从其他函数中调用 select 和 copy 函数时如何正确引用所有内容,而且我相信这对于精通 Python 的人来说可能是一个简单的解决方案。如果我像只在一个窗口中工作一样精简代码,那么一切都会按预期工作:
import tkinter as tk
def 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 tk
def 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”
是否有一些简单的东西我只是错过了,因为我是这门语言的新手?
编辑:为了清楚起见,根据布莱恩的评论修改了第二个示例。
慕标5832272
相关分类