2017-01-18 21 views
0

キャンバスに図形を描画する関数にボタンをバインドすることはできますか?ボタンを使用して図形を描く(Python Tkinter)

私はこのコードのセクションがあります。

def option(*args): 
global missguess 
missguess=missguess+1 
if missguess==1: 
    w.create_oval(210,100,295,175,width=3) 
if missguess==2: 
    w.create_line(249,175,249,285,width=3) 
if missguess==3: 
    w.create_line(249,200,270,250,width=3) 
if missguess==4: 
    w.create_line(249,200,228,250,width=3) 
if missguess==5: 
    w.create_line(249,285,228,350,width=3) 
if missguess==6: 
    w.create_line(249,285,270,350,width=3) 
    print("You Lose!") 

をし、このオプション機能は、ボタンの数にバインドされています。私はエラーを取得しておいてください。

AttributeError: 'Button' object has no attribute 'create_oval' 

私はこのような形状を描画するオプション機能の内部で関数を作るしようとしている:

def option(*args): 
global missguess 
missguess=missguess+1 
if missguess==1: 
    def oval(): 
     w.create_oval(210,100,295,175,width=3) 

が、その後何もキャンバスに現れません。これを行う方法さえあるのかどうかはわかりません。

+0

ボタンオブジェクトには 'create_oval'メソッドがありますか?ボタンはデフォルトではこのようなメソッドを持っていません。 –

+0

エラーは 'w'はCanvasではなくButtonで、' Button.create_oval'を実行しようとしています – furas

答えて

0

はい、関数を定義し、ボタンの 'command'パラメータ内にその名前を配置することは可能です。 このコードは、どのように動作するかの一般的な例です。これが役に立ちますようお願いいたします。

import Tkinter 

window = Tkinter.Tk() 

canvas = Tkinter.Canvas(window, width=640, height=480) 
canvas.pack() 

def draw_circle(): 
    canvas.create_oval(25,25,70,70) 

button = Tkinter.Button(window, text="draw circle", command=draw_circle) 
button.pack() 

window.mainloop() 
関連する問題