Python Tkinter 弹出窗口与可选择文本

4
我想要使用Tkinter制作弹出窗口。 我可以这样做:
import Tkinter
a="some data that use should be able to copy-paste"
tkMessageBox.showwarning("done","message")

但是有一个问题,用户需要能够选择、复制和粘贴显示的文本。以这样的方式是不可能做到的。

有没有办法用Tkinter来实现呢?(或者其他Python默认提供的工具)

非常感谢您提供的任何提示。

2个回答

3

这里看来,在Tkinter中使用Entry的解决方法是可行的。以下是代码:

import Tkinter as Tk
root = Tk.Tk()

ent = Tk.Entry(root, state='readonly')
var = Tk.StringVar()
var.set('Some text')
ent.config(textvariable=var, relief='flat')
ent.pack()
root.mainloop()

编辑: 为了回应您的评论,我找到了一种使用Text小部件插入多行文本的方法。下面是解决方案的草稿:

from Tkinter import *

root = Tk()
T = Text(root, height=2, width=30, bg='lightgrey', relief='flat')
T.insert(END, "Just a text Widget\nin two lines\n")
T.config(state=DISABLED) # forbid text edition
T.pack()
mainloop()

我仍然对任何更好的解决方案感兴趣 :)


嗯,这是可以接受的,但当我尝试添加几行代码时,例如:line="text", line=line+"\n", line=line+"yet some text", var.set(line)。"\n"被解释为符号,而不是换行符。 - Tebe
有趣的是,这种形式的文本无法被复制(可以选择,但不能复制)。只有我一个人这样吗?还是你也做不到? - Tebe
啊,我猜这是 T.config 中的参数 - state=DISABLED - 控制文本是否可以被选择,所以应该将其设置为 ENABLED,以允许用户选择文本。 - Tebe
呃...抱歉,第二个例子目前只支持在Linux下使用滚动按钮进行复制粘贴(我习惯性地测试了一下,没有用CTRL-c、CTRL-v,再次道歉)。NORMAL存在问题(ENABLED根本不存在):文本是可编辑的。我目前正在尝试解决这个问题(尝试将insert方法绑定到一个do_nothing函数上,但未能成功取消编辑功能)。 - bernard paulus
根据我的实验,当state=DISABLED时,似乎与<Control-KeyPress-c>的绑定被禁用了。Listbox也是一个可能的解决方案,但它距离你所要求的还有些远。 - bernard paulus
tkinter文档列出了state='readonly'选项,据说它将显示文本,使其可选择,但不允许修改 - Zak

0

您可以使用按钮进行复制和粘贴。首先需要选择。在文本小部件中,这很容易完成。

selection=nameoftextwidget.get(SEL_FIRST,SEL_LAST)

然后您可以通过选择轻松地使用此功能进行复制。如果您想将其复制/粘贴到相同的文本小部件中,可以使用以下方法:

nameoftextwidget.insert(END,"\n"+selection)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接