gpt4 book ai didi

python - Tkinter .after 模块只是延迟了 GUI 的打开

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:37 29 4
gpt4 key购买 nike

我目前正在使用 Python 在 tkinter GUI 上编写 BlackJack 游戏作为第一个项目。

我正在尝试使用 after 模块使卡片每秒出现在 GUI 上,但是此代码只是延迟了 GUI 的打开并打开了其中已有的图像。经过多次研究和不同的测试,我仍然得到相同的结果。

这是一个简化版的代码

from tkinter import *


window = Tk()

canvas = Canvas(window, width=300, height=300)
canvas.pack()


def add(image, x, y):
canvas.create_image(x, y, image=image)


image1 = PhotoImage(file="images/AceHearts.png")
image2 = PhotoImage(file="images/AceClubs.png")
image3 = PhotoImage(file="images/AceDiamonds.png")

canvas.after(1000, add(image1, 50, 50))
canvas.after(1000, add(image2, 70, 50))
canvas.after(1000, add(image3, 90, 50))

window.mainloop()

如果打开 GUI,我期望的结果是每秒添加一个图像。

最佳答案

您基本上是在调用 add() 函数并将 None 值作为 add() 传递给这些行中的所有回调返回 None

canvas.after(1000, add(image1, 50, 50))
canvas.after(1000, add(image2, 70, 50))
canvas.after(1000, add(image3, 90, 50))

仔细看看你错过了什么。 after()函数的语法是

after( ms, func, args )

after()的参数:

  1. ms = 毫秒

  2. func = 没有括号 () 的函数,after 只需要函数的引用。

  3. args = 函数的参数(如果有的话)

您还为每个 after 函数提供了 1000 毫秒,这意味着它们都会在 1 秒后被调用。


正确的做法。

from tkinter import *

window = Tk()

canvas = Canvas(window, width=300, height=300)
canvas.pack()


def add(image, x, y):
canvas.create_image(x, y, image=image)


image1 = PhotoImage(file="images/AceHearts.png")
image2 = PhotoImage(file="images/AceClubs.png")
image3 = PhotoImage(file="images/AceDiamonds.png")

canvas.after(1000, add, image1, 50, 50) # run after 1 sec
canvas.after(2000, add, image2, 70, 50) # run after 2 sec
canvas.after(3000, add, image3, 90, 50) # run after 3 sec

window.mainloop()

关于python - Tkinter .after 模块只是延迟了 GUI 的打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882241/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com