在python的tkinter中,如何制作一个Label,以便用鼠标选择文本?

时间:2009-10-21 16:49:13

标签: python tkinter

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

编辑:

您如何修改此“hello world”应用以提供此类功能?

from Tkinter import *

master = Tk()

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

mainloop()

5 个答案:

答案 0 :(得分:9)

最简单的方法是使用高度为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()

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

答案 1 :(得分:4)

对上述代码进行了一些更改:

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()

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

答案 2 :(得分: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()

除非小部件聚焦,否则我们无法复制文本。无论如何,我们将使用鼠标button1(左键单击)选择文本,因此将其绑定到一个功能,该功能可启用文本小部件,将焦点设置在该部件上,然后再次将其禁用。

答案 3 :(得分:0)

您可以使用SequentialPerAggregateSequencingPolicy来选择文本 我真的觉得两者都很有用,使用文字真的很有帮助!在这里,我向您展示输入代码:

Text

答案 4 :(得分: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()