2017-04-24 10 views
0

、私はこのコードを持っており、それが動作します:PythonのTkinterのスケールラムダ関数

from tkinter import * 

color = [0,0,0] 

def convert_color(color): 
return '#{:02x}{:02x}{:02x}'.format(color[0],color[1],color[2]) 

def show_color(x,i): 
color[int(i)] = int(x) 
color_label.configure(bg=convert_color(color)) 

root = Tk() 
color_label = Label(bg=convert_color(color),width=20) 

rgb = [0,0,0] 
for i in range(3): 
rgb[i] = Scale(orient='horizontal',from_=0,to=255,command=lambda x, y=i: 
show_color(x,y)) 
rgb[i].grid(row=i,column=0) 

color_label.grid(row=3,column=0) 

if __name__ == '__main__': 
mainloop() 

私も、私はこれで終わったのか分からないけどそれはうまく動作します。なぜ私はxを指定しなかったのか分かりませんが、私はまだそれを必要とし、スケールをスライドすると値が更新されますか? show_color関数は1つのパラメーターを使用していましたが、機能しませんでした。私はオンラインで調べましたが、初心者であるため、自分の説明にその説明を適用できませんでした。他に何か問題がある場合は、私に知らせてください。ところで、「送信者」のようなものを使用する方法はありますか?ありがとう!

答えて

0

スケールはxを提供します。 Scaleウィジェットに関数を渡すと、その関数を現在の値で呼び出します。

多分あなたはより良いそれに追従するように、私は正気な方法であなたのコードを書き直します:

from tkinter import * 

color = [0,0,0] # standard red, green, blue (RGB) color triplet 

def convert_color(color): 
    '''converts a list of 3 rgb colors to an html color code 
    eg convert_color(255, 0, 0) -> "#FF0000 
    ''' 
    return '#{:02X}{:02X}{:02X}'.format(color[0],color[1],color[2]) 

def show_color(value, index): 
    ''' 
    update one of the color triplet values 
    index refers to the color. Index 0 is red, 1 is green, and 2 is blue 
    value is the new value''' 
    color[int(index)] = int(value) # update the global color triplet 
    hex_code = convert_color(color) # convert it to hex code 
    color_label.configure(bg=hex_code) #update the color of the label 
    color_text.configure(text='RGB: {!r}\nHex code: {}'.format(color, hex_code)) # update the text 

def update_red(value): 
    show_color(value, 0) 
def update_green(value): 
    show_color(value, 1) 
def update_blue(value): 
    show_color(value, 2) 

root = Tk() 

red_slider = Scale(orient='horizontal',from_=0,to=255,command=update_red) 
red_slider.grid(row=0,column=0) 

green_slider = Scale(orient='horizontal',from_=0,to=255,command=update_green) 
green_slider.grid(row=1,column=0) 

blue_slider = Scale(orient='horizontal',from_=0,to=255,command=update_blue) 
blue_slider.grid(row=2,column=0) 

color_text = Label(justify=LEFT) 
color_text.grid(row=3,column=0, sticky=W) 

color_label = Label(bg=convert_color(color),width=20) 
color_label.grid(row=4,column=0) 

mainloop() 
+0

は、私は今理解いただきありがとうございます!コマンドは引数を渡すことができるか分からなかった。引数の名前は常に 'x'ですか?私が2番目の議論としてそれを使用したいのであれば、私はそれをどうやって行うのですか?デフォルトでは最初の引数のようです。 –

+0

Scaleコマンドが渡す引数の名前は付けられません。それは「ポジション論争」です。常に最初の位置にあり、私のコードでは「価値」と名づけました。元のコードでは、 "x"という名前でした。 Scaleコマンドは1つの引数だけを渡しますが、複数の場合はdef行を一致させます:def(arg1、arg2) '。関数が取る引数の数と型は "シグネチャ"と呼ばれます。 – Novel

関連する問題