我已经想通了,之后很多的挖掘。硬如我不得不寻找摸不着头脑,我想其他人将从中受益:
应用于ttk.Entry标准样式根本不采取fieldbackground选项,这将是什么样的变化的颜色文本输入字段。解决办法是创建一个新的元素,确实响应该选项。
from tkinter import *
from tkinter import ttk
root_window = Tk()
estyle = ttk.Style()
estyle.element_create("plain.field", "from", "clam")
estyle.layout("EntryStyle.TEntry",
[('Entry.plain.field', {'children': [(
'Entry.background', {'children': [(
'Entry.padding', {'children': [(
'Entry.textarea', {'sticky': 'nswe'})],
'sticky': 'nswe'})], 'sticky': 'nswe'})],
'border':'2', 'sticky': 'nswe'})])
estyle.configure("EntryStyle.TEntry",
background="green",
foreground="grey",
fieldbackground="black")
entry_v = StringVar()
entry = ttk.Entry(root_window, style="EntryStyle.TEntry", textvariable=entry_v)
entry.pack(padx=10, pady=10)
不幸的是,似乎改变边框颜色的唯一方式是要么给它零边框宽度和巢它在一个帧作用作为其边框,或定义一个新的布局项目即使用图像作为边框。
此外,请注意,背景控制唯一的事情是非常小的角落空间;如果你仔细观察,你可以在每个角落看到一个绿色的像素。
要使用图像作为边框,你可以这样做:
img2 = PhotoImage("entryBorder", data="""
R0lGODlhHQAdAOMNAAAAAAQGCAgLERkfLR0mODBFZTFFZTNIajtTezxTez1XgD5XgU
Fch////////////ywAAAAAHQAdAAAEbHCQg5i9OGt0iFRaKGLKxBgCoK5s6woGc4Cp
a9+AwFQM7ruYn1AVHP6KRhwyaVsyW87nKioFUKXXZ5a5TXaN32FYOD5eqsAzmlX2tZ
XqNZGxYATkgAD9wCjUqgIFMgR1I4YZCx4TCYeGCR0DEQA7""")
oestyle = ttk.Style()
oestyle.element_create("blueborder", "image", "entryBorder",
border=3, sticky="nsew")
oestyle.layout("OEntryStyle.TEntry",
[('Entry.blueborder', {'children': [(
'Entry.padding', {'children': [(
'Entry.textarea', {'sticky': 'nswe'})],
'sticky': 'nswe'})], 'sticky': 'nswe'})])
oestyle.configure("OEntryStyle.TEntry",
background="black",
foreground="grey")
oentry_v = StringVar()
oentry = ttk.Entry(root_window, style="OEntryStyle.TEntry", textvariable=oentry_v)
oentry.pack(padx=10, pady=10)
字符的字符串是通过将我想为GIF边界的图像生成
import base64
with open('otherframeBorder.gif', 'rb') as f:
encoded = base64.encodestring(f.read())
print(encoded.decode('latin1'))
在我的系统中,'fieldbackground'选项与股票'TEntry';无需创建自定义元素。 Python 2.7/Windows和2.7.4/Ubuntu;在这两种情况下,'Tkinter .__ version__ =='$ Revision:81008 $''和'Tkinter.TkVersion =='8。''顺便说一句,感谢'fieldbackground',这是几乎没有记录。 – atzz
如果我不得不猜测,那是因为你在Ubuntu上;据我了解,ttk使用系统的原生样式的部件。所以在Ubuntu中,假设文本输入框需要一个fieldbackground,但不是Windows。 – Firnagzen
它在Windows上也适用于我(正如前面的评论所述)。 *但*这是带有经典主题的Windows XP-32;目前我使用Aero在Win7-64上运行,它不起作用!不幸的是,我现在没有时间进行更多的实验。也许以后。 – atzz