首页 > 解决方案 > 背景图像未在程序中显示?

问题描述

所以我试图让这个图像在显示这个类时作为背景加载,但是,我的程序只是运行并且没有显示图像。我是python和一般编码的新手,所以我可能做错了一些很容易修复的错误,但是是的,在此先感谢!(只是一些上下文,我正在制作一个记忆游戏,如果需要更多代码,只需请求!)

import tkinter as tk  # imports tkinter as tk
from tkinter import font as tkfont  # imports font as tkfont
import random  
import string  
import sys 
import time  
import pygame 


class SampleApp(tk.Tk):  # class - Basically my Main hub

def __init__(self, *args, **kwargs): 
    tk.Tk.__init__(self, *args, **kwargs)  
    self.geometry("1024x576+155+60")  
    self.title("Memory Mania")  

    self.title_font = tkfont.Font(family='verdana', size=45, weight="bold", slant="italic")

    container = tk.Frame(self)  
    container.pack(side="top", fill="both", expand=True)  
    container.grid_rowconfigure(0, weight=1)  
    container.grid_columnconfigure(0, weight=1)  

    self.frames = {}  
    for F in (Login, MainMenu, Tutorial, Tutorial2, Difficulty, Settings, 
    EasyDifficulty, MediumDifficulty, HardDifficulty, InsaneDifficulty,= 
    EnterCharacterScreen, CorrectScreen, IncorrectScreen, Level2,
              WinGameScreen):

        page_name = F.__name__
        frame = F(parent=container, controller=self)
        self.frames[page_name] = frame

        frame.grid(row=0, column=0, sticky="nsew")

    self.show_frame("Login") 

def show_frame(self, page_name): 
    frame = self.frames[page_name]  
    frame.tkraise()  


class Login(tk.Frame): 

def __init__(self, parent, controller):  
    tk.Frame.__init__(self, parent, bg="#2699C3") 
    self.controller = controller  

    background_image = tk.PhotoImage("giphy.gif")
    background_label = tk.Label(parent, image=background_image)
    background_label.place(x=0, y=0, relwidth=1, relheight=1)

    background_label.image = background_image

标签: pythonpython-3.xtkinter

解决方案


您正在尝试gif在后台使用 a ,但tkinter与 s 不能很好地配合使用,gif因此您必须自己驱动动画。动画 gif 由单个文件中的多个帧组成。Tk加载第一帧,但您可以通过在创建图像时传递索引参数来指定不同的帧。例如:

frame2 = PhotoImage(file="giphy.gif", format="gif -index 2")

如果您将所有帧加载到单独PhotoImage的 s 中,然后使用计时器事件来切换正在显示的帧 ( label.configure(image=nextframe))。计时器的延迟可让您控制动画速度。除了超出帧数后无法创建帧之外,没有提供任何内容来为您提供图像中的帧数。

有关官方建议,请参阅照片Tk 手册页。


推荐阅读