2017-09-07 27 views
0

私はPythonでスティッキーノートプログラムを作成しようとしています。クリックすると、テキストボックスの背景が黄色に変わるようなボタンを作成したいと思います。私のコードは以下の通りです: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() 

私はそれを動作させるように思えません。 「緊急」ボタンをクリックすると何も起こりません。任意のアドバイスをありがとう

答えて

1

highLightはインスタンスメソッド*なので、最初の引数はでなく、txtEntryでなければなりません。引数として渡さなくても、にはローカル名ではなくselfの属性としてアクセスできます。

あなたは、あなたが「その関数の戻り値を取り、コマンドプロパティに割り当て、今self.highLight()を呼び出し、」パイソンを self.URGENT["command"] = self.highLight言っているん
def highLight(self): 
    self.txtEntry.configure(background='yellow') 

。しかし、highLightはNoneを返すので、ボタンはコマンドなしで終了します。代入を括弧なしで実行し、戻り値の代わりにself.highLightがプロパティに割り当てられているようにします。

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

(*少なくとも、私はそれがあると仮定します。あなたのインデントがそのように、それはスティッキークラス定義の内部で実際にあなたのdef秒のかが明確ではありませんアップネジ止めされている。)

+0

は、あなたの助けのためにどうもありがとうございます! –

関連する問題