2

Tkinterで3つの関数を書いています。各関数の形式は ObjectName(c,x,y) で、c はキャンバスの名前です。各関数が任意のキャンバスに形状を描画するようにします。例:

from Tkinter import *
root = Tk()

def line(c,x,y):
    root = Tk()
    c = Canvas(root, width=600, height=800)
    c.pack()
    c.create_line(x-160,y,x+300,y)

drawLine(c,200,300)
root.mainloop() 

問題: 同じ関数を呼び出して同じキャンバスに 2 つの図形を描画すると、2 つの異なるキャンバスに描画されます :(

4

1 に答える 1

1

line(または、関数名と使用法が一貫していないように見えるため、drawLine)を呼び出すたびに、コードは新しいキャンバスオブジェクトを作成しているように見えます。関数に新しいルートオブジェクトとCanvasオブジェクトを作成しないでください。

次のようなものを試してください。

from Tkinter import *

def drawLine(c, x, y):
    c.create_line(x - 160, y, x + 300, y)

root = Tk()
c = Canvas(root, width=600, height=800)
c.pack()

drawLine(c, 200, 300)
drawLine(c, 300, 400)
drawLine(c, 350, 450)

root.mainloop()
于 2012-10-31T22:44:36.137 に答える