2017-12-09 2 views
0

クリックすると色が変わるようにボタンを設定しようとしています。ボタンの色が定義されていないため変更できません - Python .Tkinter

from tkinter import * 

root = Tk() 

def buttonsMake(): 
    for c in range(10): 
     for r in range(3): 
      movieSeats=Button(root, text="Empty", bg="green", fg="white", 
width=5, height=1, command=lambda c=c, r=r:[redClick(c, r)]) 
      movieSeats.grid(row=r,column=c) 


def redClick(c, r): 
    movieSeats.configure(bg="red") 



buttonsMake() 
root.mainloop() 

私はそれが色 を変更することを期待ここでエラーです:

movieSeats=Button(root, text="Empty", bg="green", fg="white", width=5, 
height=1, command=lambda c=c, r=r:[redClick(c, r)]) 
    File "C:/Users/----/Downloads/test2.py", line 21, in redClick 
    movieSeats.configure(bg="red") 
NameError: name 'movieSeats' is not defined 
+0

ボタンを使用してコードを正しくフォーマットすることができます。 – furas

+0

lambdaにリストは必要ありません。 'lambda c = c、r = r:redClick(c、r)' – furas

+1

'movieSeats'は両方の関数のローカル変数です。グローバル変数を作成するには、buttonsMake()で 'global movieSeats'を使う必要があります。 – furas

答えて

1

movieSeatsので、それはredClickに存在しないとエラーname 'movieSeats' is not defined

を得る buttonsMake()内のローカル変数であります

global movieSeatsをで使用する必要がありますグローバル変数を作成します。ところで


あなただけの最後のボタンへのアクセス権を持っているので、同じ変数へのすべてのボタンをASSINGます。すべてのボタンをリストのままにしておくか、またはredClickパラメータとして

import tkinter as tk 

# --- functions --- 

def make_buttons(): 

    for c in range(10): 
     for r in range(3): 
      btn = tk.Button(root, text="Empty") 
      btn['command'] = lambda c=c, r=r, b=btn:red_click(c, r, b) 
      btn.grid(row=r,column=c) 

def red_click(c, r, btn): 
    btn.configure(bg="red") 

# --- main --- 

root = tk.Tk() 

make_buttons() 

root.mainloop() 
関連する問題