2013-07-14 14 views
5

मैं ttk से किसी प्रविष्टि विजेट का पृष्ठभूमि रंग कैसे बदलूं? क्या मैं अब तक है:ttk प्रविष्टि पृष्ठभूमि रंग

 self.estyle = ttk.Style() 
     self.estyle.configure("EntryStyle.TEntry", background='black') 
     self.estyle.map("EntryStyle.TEntry", 
         foreground=[('disabled', 'yellow'), 
            ('active', 'blue')], 
         background=[('disabled', 'magenta'), 
            ('active', 'green')], 
         highlightcolor=[('focus', 'green'), 
             ('!focus', 'red')]) 
     self.urlentry_v = StringVar() 
     self.urlentry = ttk.Entry(self.input_frame, style="EntryStyle.TEntry", 
            textvariable=self.urlentry_v) 

असल में, मैं सब कुछ मैं के बारे में सोच सकते हैं बदल दिया है, लेकिन पाठ प्रविष्टि हठ सफेद बनी हुई है।

इसके अतिरिक्त, क्या सीमा रंग बदलने का कोई तरीका है?

उत्तर

15

मैंने इसे लॉट खोदने के बाद, इसे समझ लिया है। जितना मुश्किल था, मुझे यह पता लगाने के लिए खोजना पड़ा, मुझे लगता है कि दूसरों को इससे फायदा होगा:

मानक शैली 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')) 
+0

मेरे सिस्टम पर, 'fieldbackground' विकल्प स्टॉक' TEntry' साथ काम करता है; एक कस्टम तत्व बनाने की जरूरत नहीं है। पायथन 2.7/विंडोज़ और 2.7.4/उबंटू; दोनों मामलों में, 'Tkinter .__ संस्करण__ ==' $ संशोधन: 81008 $ ''और' Tkinter.TkVersion ==' 8।5'' बीटीडब्लू, 'फील्डबैकग्राउंड' के लिए धन्यवाद, जिसे लगभग कहीं भी दस्तावेज नहीं किया गया है। – atzz

+0

अगर मुझे लगता है, ऐसा इसलिए है क्योंकि आप उबंटू पर हैं; जैसा कि मैं इसे समझता हूं, ttk विगेट्स के लिए सिस्टम की मूल शैलियों का उपयोग करता है। तो उबंटू में, संभवतः, टेक्स्ट एंट्री बॉक्स फ़ील्डबैकग्राउंड लेता है, लेकिन विंडोज़ नहीं। – Firnagzen

+0

यह विंडोज़ पर भी मेरे लिए काम करता था (जैसा कि पिछली टिप्पणी में उल्लेख किया गया है)। * लेकिन * क्लासिक थीम के साथ विंडोज एक्सपी -32 था; वर्तमान में मैं एरो के साथ Win7-64 पर हूं और यह काम नहीं करता है! दुर्भाग्य से मेरे पास अभी और अधिक प्रयोग के लिए समय नहीं है; शायद बाद में। – atzz

1

के लिए सीमाओं को मैं एक gif के रूप में चाहते हैं की एक छवि खिला द्वारा उत्पन्न होता है नीचे दिया गया कोड पाइथन 3.3.2 और टीसीएल/टीसी 8.5 के साथ आईमैक पर मेरे लिए ठीक काम करता है। पाइथन 3.3.2 और टीसीएल/8.4 8.4 के साथ मैक जी 5 पर भी काम करता है। यह विंडोज एक्सपी एसपी 3 पर पायथन 3.3.2 और टीसीएल/टीसी 8.5 के साथ काम नहीं करता है। बाद के मामले में, प्रवेश पृष्ठभूमि, जैसा कि यह आपके लिए किया गया था, जिद्दी सफेद बना हुआ है।

यहां विंडोज़ में रंग नहीं बदलते हैं। उदाहरण टीसीएल में भी है।

https://groups.google.com/forum/#!topic/comp.lang.tcl/RmbiFrTFCdw

मैं एक छोटे से अपने nonworking उदाहरण पर काम किया, और यह भी अपने Mac पर काम करता है, सिवाय इसके कि मैं "सक्रिय" और "ध्यान" नक्शे में से कोई जवाब नहीं मिलता है। वहां कुछ भी नहीं होता है।

इनमें से कुछ अभी भी मेरे लिए बहुत रहस्यमय है। ऐसा लगता है कि यहां कुछ मदद नहीं है की तरह:
http://wiki.tcl.tk/38127
http://wiki.tcl.tk/37973
लेकिन यह Tcl में है और दर्शक की ओर से कुछ ज्ञान हो जाती है बस इसे पढ़ने के लिए।

यहाँ मेरी उदाहरण है कि मैं इस पोस्ट की शुरुआत में उल्लेख किया है:

from tkinter import * 
from tkinter.ttk import * 


class App(Frame): 
    def __init__(self, parent): 
     super().__init__(parent) 
     s = Style() 
     s.configure('Pink.TEntry', background='hot pink') 
     self.e1 = Entry(self) 
     print("Our entry is of type {}".format(type(self.e1))) 
     b = Button(self, text="Switch Styles", command=self.switch) 
     self.pink = False 

     self.e1.pack() 
     b.pack() 

    def switch(self): 
     if self.pink: 
      print("going white", end="") 
      self.e1["style"] = "TEntry" 
     else: 
      print("going pink", end="") 
      self.e1["style"] = "Pink.TEntry" 
     self.pink = not self.pink 
     print("; style is now {}".format(self.e1["style"])) 

root = Tk() 
a = App(root) 
a.pack() 
root.mainloop() 
+0

काम नहीं कर रहा है। मैं Xubuntu 16.04 और पायथन 2.7 पर एक्सएफसीई का उपयोग कर रहा हूं। – rbaleksandar

संबंधित मुद्दे