程序中没有显示背景图像?

时间:2018-08-08 09:49:59

标签: python python-3.x tkinter

所以我想让这个图像在显示此类时作为背景加载,但是,我的程序只运行了,没有图像显示。我是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

1 个答案:

答案 0 :(得分:-1)

您正在尝试在后台使用gif,但是tkintergif上效果不佳,因此您必须自己驱动动画。动画gif由单个文件中的多个帧组成。 Tk加载第一帧,但是您可以在创建图像时通过传递索引参数来指定不同的帧。例如:

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

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

有关官方建议,请参见photo Tk手册页。