私は、一度にキャンバスに矩形を描画するプログラムを作成しようとしています。瞬時に描画されないように.after関数を使用したいと思います。.afterと.create_rectangleの使い方
現在、私(ストリップダウン)のコードは次のようになります。
root = Tk()
gui = ttk.Frame(root, height=1000, width=1000)
root.title("Test GUI")
rgb_colour = "#%02x%02x%02x" % (0, 0, 255)
def func(*args):
for item in sorted_list:
canvas.create_rectangle(xpos, ypos, xpos+10, ypos+10, fill=rgb_colour)
xpos += 10
canvas = Canvas(gui, width=1000, height=1000)
canvas.grid()
func() # Code doesn't actually look exactly like this
root.mainloop()
と私は描画されている各長方形の間に遅延があるようにしたいです。私は私がやるべきことを集めています
def draw(*args):
canvas.create_rectangle(xpos, ypos, xpos+10, ypos+10, fill=rgb_colour)
for item in sorted_list:
root.after(10, draw)
ループのための私の原稿が長方形を作成するには、XPOS、YPOS、および色の変数が含まれている関数内でその新しい関数をネストされているので、私はこれを行うことはできませんしかし、必要な変数が不足しています。クラス内の関数全体を入れ子にしてクラスの変数を呼び出すことでこれを解決できることは分かっていますが、このコードを非常にシンプルにしたいのですが、矩形の作成を遅らせる方法があればクラスの使用?
編集:この:
from tkinter import *
root = Tk()
canvas = Canvas(root, width=400, height=400, bg="white")
canvas.pack()
items = [1, 2, 3, 4, 5]
delay = 100
def draw_all(*args):
global delay
x, y = 0, 10
for item in items:
canvas.after(delay, canvas.create_rectangle(x, y, x+10, y+10, fill="red"))
delay += 10
x += 10
root.bind('<Return>', draw_all)
root.mainloop()
はまだ、最も簡単な解決策は、それが必要とする他のデータと一緒に項目のリストを取る関数を作成することではAttributeError
ありがとう助けてくれてありがとう、私はあなたの2番目の例を動作させることができませんでした、 'AttributeError: 'int'オブジェクトに属性 '__name __''があります。メインの投稿を編集して、テストコード全体を含めます。 –
@BenWo:あなたは 'after'を間違って使用しています。どのように私がそれを使用するかを詳しく見てください。 ( 'create_rectangle(...)'を使わないでください) –
ありがとう!どのように私はそれを逃すことができるか分からない、私は一見、このメソッドは一見矩形の座標を受け入れるように見て、もう一つのフォローアップの質問があります、どのように塗りつぶしの色を追加するつもりですか? –