मैंने इसे लॉट खोदने के बाद, इसे समझ लिया है। जितना मुश्किल था, मुझे यह पता लगाने के लिए खोजना पड़ा, मुझे लगता है कि दूसरों को इससे फायदा होगा:
मानक शैली ttk.Entry पर लागू होती है, केवल फ़ील्डबैकग्राउंड विकल्प नहीं लेती है, जो कि रंग का रंग बदलती है पाठ प्रविष्टि क्षेत्र। समाधान यह नया तत्व बनाने के लिए है कि विकल्प का जवाब देता है।
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)
वर्णों की स्ट्रिंग
import base64
with open('otherframeBorder.gif', 'rb') as f:
encoded = base64.encodestring(f.read())
print(encoded.decode('latin1'))
मेरे सिस्टम पर, 'fieldbackground' विकल्प स्टॉक' TEntry' साथ काम करता है; एक कस्टम तत्व बनाने की जरूरत नहीं है। पायथन 2.7/विंडोज़ और 2.7.4/उबंटू; दोनों मामलों में, 'Tkinter .__ संस्करण__ ==' $ संशोधन: 81008 $ ''और' Tkinter.TkVersion ==' 8।5'' बीटीडब्लू, 'फील्डबैकग्राउंड' के लिए धन्यवाद, जिसे लगभग कहीं भी दस्तावेज नहीं किया गया है। – atzz
अगर मुझे लगता है, ऐसा इसलिए है क्योंकि आप उबंटू पर हैं; जैसा कि मैं इसे समझता हूं, ttk विगेट्स के लिए सिस्टम की मूल शैलियों का उपयोग करता है। तो उबंटू में, संभवतः, टेक्स्ट एंट्री बॉक्स फ़ील्डबैकग्राउंड लेता है, लेकिन विंडोज़ नहीं। – Firnagzen
यह विंडोज़ पर भी मेरे लिए काम करता था (जैसा कि पिछली टिप्पणी में उल्लेख किया गया है)। * लेकिन * क्लासिक थीम के साथ विंडोज एक्सपी -32 था; वर्तमान में मैं एरो के साथ Win7-64 पर हूं और यह काम नहीं करता है! दुर्भाग्य से मेरे पास अभी और अधिक प्रयोग के लिए समय नहीं है; शायद बाद में। – atzz