2017-09-07 4 views
0

Ich versuche, ein Sticky-Note-Programm in Python zu üben. Ich möchte eine Schaltfläche so erstellen, dass beim Klicken der Hintergrund des Textfelds in gelb geändert wird. Mein Code ist unten:Ändern der Hintergrundfarbe mit einer Schaltfläche in Tkinter

from tkinter import * 
import random 


color = ['burlywood2', 'seagreen1', 'steelblue1', 'gold'] 
randomColor = random.choice(color) 

class Sticky(Frame): 
def __init__(self, master): 
    Frame.__init__(self, master) 
    master.minsize(width=250, height=200) 
    master.configure(background=randomColor) 
    self.pack(fill=BOTH, expand=YES) 


    self.txtEntry = Text(background=randomColor, highlightthickness=0, relief=RAISED) 
    self.txtEntry.pack(fill=BOTH, expand=YES) 

    myString = input("Enter your text here: ") 
    self.txtEntry.insert(END, myString) 
    self.createWidgets() 


def createWidgets(self): 
    self.QUIT = Button(self) 
    self.QUIT["text"] = "Completed" 
    self.QUIT["fg"] = "white" 
    self.QUIT["background"] = "green" 
    self.QUIT["command"] = self.quit 
    self.QUIT.pack(fill=BOTH, expand=YES) 

    self.URGENT = Button(self) 
    self.URGENT["text"] = "URGENT" 
    self.URGENT["fg"] = "yellow" 
    self.URGENT["background"] = "red" 

    self.URGENT["command"] = self.highLight() 
    self.URGENT.pack(fill=BOTH, expand=YES) 

def highLight(txtEntry): 
    txtEntry.configure(background='yellow') 
    txtEntry.update() 

Ich kann nicht scheinen, es zur Arbeit zu bekommen. Wenn der "URGENT" -Button gedrückt wird, passiert nichts. Danke für irgendeinen Rat

Antwort

1

highLight ist eine Instanzmethode *, also sollte sein erstes Argument self sein, nicht txtEntry. Auch ohne es als Argument übergeben zu haben, können Sie immer noch auf txtEntry als Attribut von self statt als lokaler Name zugreifen.

def highLight(self): 
    self.txtEntry.configure(background='yellow') 

Wenn Sie das tun self.URGENT["command"] = self.highLight, Sie Python sagen „nennen self.highLight() gerade jetzt, dann nehmen Sie den Rückgabewert dieser Funktion und weisen Sie auf den Befehl Eigenschaft“. HighLight gibt jedoch None zurück, sodass die Schaltfläche keinen Befehl enthält. Führen Sie die Zuweisung ohne die Klammern aus, so dass self.highLight der Eigenschaft statt seinem Rückgabewert zugewiesen wird.

self.URGENT["command"] = self.highLight 

(* zumindest gehe ich davon aus es ist. Ihre Vertiefung nach oben geschraubt wird, so ist es nicht klar, welche Ihre def s tatsächlich in der Sticky Klassendefinition ist.)

+0

Vielen Dank für Ihre Hilfe ! –

Verwandte Themen