2017-09-03 3 views
0

Also habe ich an diesem Programm gearbeitet und ich finde es sehr schwer herauszufinden, was los ist. Ich bin ziemlich neu zu Tkinter, so dass dies sehr gering sein kann.Ändern der Eingabefeld Hintergrundfarbe in tkinter

Ich versuche, das Programm die Hintergrundfarbe des Eingabefeldes zu ändern, wenn die Check-Taste gedrückt wird. Oder noch besser, wenn ich es irgendwie dynamisch ändern könnte, wäre es noch besser.

Dies ist mein Code zur Zeit:

TodayReading = [] 
colour = "" 
colourselection= ['green3', 'dark orange', "red3"] 
count = 0 

def MakeForm(root, fields): 
    entries = [] 
    for field in fields: 
     row = Frame(root) 
     lab = Label(row, width=15, text=field, font=("Device",10, "bold"), anchor='center') 
     ent = Entry(row) 
     row.pack(side=TOP, padx=5, fill=X, pady=5) 
     lab.pack(side=LEFT) 
     ent.pack(side=RIGHT, expand=YES, fill=X) 
     entries.append((field, ent)) 
    return entries 

def SaveData(entries): 
    import time 
    for entry in entries: 
     raw_data_point = entry[1].get() 
     data_point = (str(raw_data_point)) 
     TodayReading.append(data_point) 
    c.execute("CREATE TABLE IF NOT EXISTS RawData (Date TEXT, Glucose REAL, BP INTEGER, Weight INTEGER)") 
    c.execute("INSERT INTO RawData (Date, Glucose, BP, Weight) VALUES (?, ?, ?, ?)", (time.strftime("%d/%m/%Y"), TodayReading[0], TodayReading[1] , TodayReading[2])) 
    conn.commit() 
    conn.close() 

def DataCheck(): 
    if ((float(TodayReading[0])>=4 and (float(TodayReading[0])<=6.9))): 
     colour = colourselection[count] 
     NAME OF ENTRY BOX HERE.configure(bg=colour) 

Danke für die Hilfe. Jemand hat es vielleicht bereits beantwortet, aber wie ich schon sagte, ich bin neu bei tkinter, also wenn ich es schon gesehen habe, habe ich nicht herausgefunden, wie ich es umsetzen soll.

+0

Am Ende, was ich habe zu tun ist sicherzustellen, dass die Farben grün, rot, gelb je nach Eintrag ändern. –

Antwort

0

Bitte siehe mein Beispiel unten:

from tkinter import * 

class App: 
    def __init__(self, root): 
     self.root = root 
     self.var = StringVar() #creates StringVar to store contents of entry 
     self.var.trace(mode="w", callback=self.command) 
     #the above sets up a callback if the variable containing 
     #the value of the entry gets updated 
     self.entry = Entry(self.root, textvariable = self.var) 
     self.entry.pack() 
    def command(self, *args): 
     try: #trys to update the background to the entry contents 
      self.entry.config({"background": self.entry.get()}) 
     except: #if the above fails then it does the below 
      self.entry.config({"background": "White"}) 

root = Tk() 
App(root) 
root.mainloop() 

Also, die oben erzeugt ein entry Widget und eine variable, die den Inhalt dieses Widget enthält.

Jedes Mal, wenn der variable aktualisiert wir command() rufen, die wird try die entry Hintergrundfarbe auf die Inhalte der entry (IE, Rot, Grün, Blau) und except Fehler zu aktualisieren, um den Hintergrund zu Weiß, wenn eine Ausnahme Aktualisierung ist erhöht.


Hier ist eine Methode, dies zu tun, ohne ein class zu verwenden und mit einem separaten testlist den Wert der entry zu überprüfen: von tkinter import *

root = Tk() 

global entry 
global colour 

def callback(*args): 
    for i in range(len(colour)): 
     if entry.get().lower() == test[i].lower(): 
      entry.configure({"background": colour[i]}) 
      break 
     else: 
      entry.configure({"background": "white"}) 


var = StringVar() 
entry = Entry(root, textvariable=var) 
test = ["Yes", "No", "Maybe"] 
colour = ["Red", "Green", "Blue"] 
var.trace(mode="w", callback=callback) 

entry.pack() 
root.mainloop() 
+0

Sorry, das ist vielleicht blöd, aber wie würde ich das in meiner Arbeit umsetzen, wie wo und wie? –

+0

@BhavikNarang Ich habe meine Antwort aktualisiert –

+0

Thing ist das ist ein Eingabefeld, aber wie mache ich es so, dass jedes Eingabefeld separat geprüft wird, denn wie Sie sehen können, habe ich mein Formular in einer Schleife gemacht –

Verwandte Themen