22

在 python 的 tkinter 界面中,是否有一个配置选项可以更改标签,以便您可以选择标签中的文本,然后将其复制到剪贴板?

编辑:

你会如何修改这个“hello world”应用程序来提供这样的功能?

from Tkinter import *

master = Tk()

w = Label(master, text="Hello, world!")
w.pack()

mainloop()
4

5 回答 5

15

最简单的方法是使用高度为 1 行的禁用文本小部件:

from Tkinter import *

master = Tk()

w = Text(master, height=1, borderwidth=0)
w.insert(1.0, "Hello, world!")
w.pack()

w.configure(state="disabled")

# if tkinter is 8.5 or above you'll want the selection background
# to appear like it does when the widget is activated
# comment this out for older versions of Tkinter
w.configure(inactiveselectbackground=w.cget("selectbackground"))

mainloop()

您可以以类似的方式使用条目小部件。

于 2009-10-21T17:26:49.013 回答
5

对上面的代码做了一些改动:

from tkinter import *

master = Tk()

w = Text(master, height=1)
w.insert(1.0, "Hello, world!")
w.pack()



# if tkinter is 8.5 or above you'll want the selection background
# to appear like it does when the widget is activated
# comment this out for older versions of Tkinter
w.configure(bg=master.cget('bg'), relief="flat")

w.configure(state="disabled")

mainloop()

浮雕需要平坦,才能看起来像显示器的普通部分。:)

于 2010-09-26T21:33:59.333 回答
4

您可以使用其中一个来选择文本,Text或者Entry 我真的觉得两者都很有用,使用文本真的很有帮助!这里我给你看一个入口代码:

from tkinter import *
root = Tk()
data_string = StringVar()
data_string.set("Hello World! But, Wait!!! You Can Select Me :)")
ent = Entry(root,textvariable=data_string,fg="black",bg="white",bd=0,state="readonly")
ent.pack()
root.mainloop()
于 2018-11-30T16:06:09.687 回答
1

尝试了 Bryan Oakley 的回答。能够选择文本,但无法将其复制到剪贴板。这是一种解决方法。

from Tkinter import *

def focusText(event):
   w.config(state='normal')
   w.focus()
   w.config(state='disabled')

master = Tk()

w = Text(master, height=1, borderwidth=0)
w.insert(1.0, "Hello, world!")
w.pack()

w.configure(state="disabled")

w.bind('<Button-1>', focusText) 

mainloop()

除非小部件获得焦点,否则我们无法复制文本。无论如何,我们将使用鼠标按钮 1(左键单击)选择文本,因此将其绑定到启用文本小部件的函数,设置焦点,然后再次禁用它。

于 2020-04-09T17:42:24.320 回答
0

其他答案将文本插入文本框而不是替换文本。当您只需要更改一次文本时,这很有效。但是,如果需要替换它,则需要先删除该行。以下代码将解决此问题:

from tkinter import *

master = Tk()

w = Text(master, height=1)
w.delete(1.0, "end")
w.insert(1.0, "Hello, world!")
w.pack()



# if tkinter is 8.5 or above you'll want the selection background
# to appear like it does when the widget is activated
# comment this out for older versions of Tkinter
w.configure(bg=master.cget('bg'), relief="flat")

w.configure(state="disabled")

mainloop()
于 2021-06-17T19:51:28.697 回答