Как я могу приостановить мой код перед отображением метки - PullRequest
0 голосов
/ 11 июня 2019

В своем коде я пытаюсь создать загрузочный экран для игры-фроггера, но по какой-то причине я сталкиваюсь с проблемой, когда я отображаю изображение, а затем выполняю функцию .sleep перед отображением надписи над ней. однако он отображает их обоих одновременно, он просто запускает код через 1 секунду после того, как должен, может кто-нибудь помочь?

Вот мой код ниже:

from tkinter import *

import tkinter as tk

import time

window = Tk()
window.geometry("1300x899")

LoadingScreen = PhotoImage(file = "FroggerLoad.gif")

Loading = Label(master = window, image = LoadingScreen)

Loading.pack()

Loading.place(x = 65, y = 0)

time.sleep(1)

FroggerDisplay = Label(master = window, font ("ComicSans",100,"bold"),text = "Frogger")
FroggerDisplay.pack()

FroggerDisplay.place(x = 500, y = 300)

window.mainloop()

1 Ответ

0 голосов
/ 13 июня 2019

Когда вы используете time.sleep(1) перед запуском window.mainloop(), окно создается только через 1 секунду, и одновременно с ним будет создана метка FroggerDisplay.Таким образом, вы не можете использовать time.sleep(seconds) сейчас.

Однако вы можете использовать метод window.after(ms, func) и поместить в функцию весь код между time.sleep(1) и window.mainloop().Обратите внимание, что в отличие от time.sleep(seconds) вы должны указать window.after (первый аргумент) время как миллисекунды .

Вот отредактированный код:

from tkinter import *


def create_fd_label():
    frogger_display = Label(root, font=("ComicSans", 100, "bold"), text="Frogger")  # create a label to display
    frogger_display.place(x=500, y=300)  # place the label for frogger display

root = Tk()  # create the root window
root.geometry("1300x899")  # set the root window's size

loading_screen = PhotoImage(file="FroggerLoad.gif")  # create the "Loading" image
loading = Label(root, image=loading_screen)  # create the label with the "Loading" image
loading.place(x=65, y=0)  # place the label for loading screen

root.after(1000, create_fd_label)  # root.after(ms, func)
root.mainloop()  # start the root window's mainloop

PS: 1) Почему вы используете .pack(...), а затем .place(...) методы одновременно - первый (.pack(...) здесь) будет игнорироваться Tkinter.
2) Лучше использовать Canvas виджет для создания игры - в отличие от ярлыков он поддерживает прозрачность и проще в использовании.Например:

from tkinter import *


root = Tk()  # create the root window
root.geometry("1300x899")  # set the root window's size
canv = Canvas(root)  # create the Canvas widget
canv.pack(fill=BOTH, expand=YES) # and pack it on the screen

loading_screen = PhotoImage(file="FroggerLoad.gif")  # open the "Loading" image
canv.create_image((65, 0), image=loading_screen)  # create it on the Canvas

root.after(1000, lambda: canv.create_text((500, 300),
                                          font=("ComicSans", 100, "bold"),
                                          text="Frogger"))  # root.after(ms, func)
root.mainloop()  # start the root window's mainloop

Примечание: вам может потребоваться изменить координаты с помощью Canvas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...