Python Tkinter文本背景

4

我正在尝试为Tkinter文本小部件设置背景颜色 - 我试图复制这里的示例(链接)(链接),两者都表明我可以这样做:

w.create_text(*textSet, text=i[3], font=("Helvetica", 16), bg="white"))

但是当我尝试这样做时,Tkinker会报错:
w.create_text(*textSet, text=i[3], font=("Helvetica", 16), bg="white")
File "C:\python27\lib\lib-tk\Tkinter.py", line 2213, in create_text
return self._create('text', args, kw)
File "C:\python27\lib\lib-tk\Tkinter.py", line 2189, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: unknown option "-bg"

我尝试使用相同结果的“background”关键字。文本需要在圆上叠加,圆的大小是动态生成的,因此当圆小于文本时,我希望有一个实心背景,以便圆的线条不会干扰文本。你能指出我做错了什么吗?这是整个部分:

master = Tk()
w = Canvas(master, width=1000, height=1000)
w.config(bg='white')
w.pack()
w.create_oval(*coordsSet, width=3)
w.create_text(*textSet, text=i[3], font=("Helvetica", 16), bg="white")
mainloop()

你试图通过 "create_text bg =“white”" 实现什么?背景应该已经是白色的,因为画布的背景是白色的。 - ABS
文本覆盖在圆形上,因此当圆形小于文本时,我希望有一个实心背景,以便圆形的线条不会干扰文本。 - Jay Gattuso
1个回答

8

很遗憾,create_text不支持该选项。您可以使用覆盖tkInter文本小部件的方法,该小部件支持背景色并在您的第二个链接中进行了描述。或者,您可以使用bbox函数获取文本的边界框,然后在文本下方覆盖一个白色矩形,这将产生类似的效果。

第二种方法的示例:

i=w.create_text(*textSet, text=i[3], font=("Helvetica", 16))
r=w.create_rectangle(w.bbox(i),fill="white")
w.tag_lower(r,i)

能否返回正在使用的bbox的大小?(然后将其作为create_rectangle(返回值,fill =“white”)推回)。文本也是动态生成的,因此不一致。 - Jay Gattuso
是的。做类似这样的事情:i=w.create_text(*textSet, text=i[3], font=("Helvetica", 16));r=w.create_rectangle(w.bbox(i),fill="white");w.tag_lower(r,i); - ABS
太棒了,谢谢你,这正是我想要做的,而且我还学到了一点关于对象分组的知识 - 太好了! - Jay Gattuso

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