Модуль Tkinter .after просто откладывает открытие графического интерфейса - PullRequest
2 голосов
/ 27 апреля 2019

Я сейчас программирую игру BlackJack как первый проект с python в графическом интерфейсе tkinter.

Я пытаюсь использовать модуль after, чтобы карты появлялись каждую секунду в 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()

Результат, который я ожидаю, если открыть графический интерфейс, а затемодно изображение добавляется каждую секунду.

1 Ответ

1 голос
/ 27 апреля 2019

Вы в основном вызываете функцию 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. мс = миллисекунды

  2. func = функция без круглых скобок (), after просто хотят получить ссылку на функцию.

  3. args = Параметр функции, если есть

Также вы дали 1000 мс каждой after функции, что означает, что все они вызываются через 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...