无法使用 python 在 tkinter 中将图像显示为背景 [英] Unable to display Image as background in tkinter using python

查看:38
本文介绍了无法使用 python 在 tkinter 中将图像显示为背景的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图为我的 Tkinter 应用程序提供背景图像,但没有错误,也无法看到图像.我正在尝试制作我尝试放置不同图像背景的导航屏幕.

I was trying to give a Background image to my Tkinter application but there is no error and unable to see the image also. I am using trying to make the navigation screen in which I am trying put different image background.

我在实际代码中使用下面提到的几行将图像放入框架

I am using mentioned below lines in actual code to put the image in the frame

    Frame2 = tk.Frame(self.master)
    Frame2.pack(side="left", fill="both", pady=10, anchor='w', expand=True )
    photo = tk.PhotoImage(file="images/BG.jpg")
    label = tk.Label(Frame2, image=photo)
    label.image = photo
    label.place(x=0, y=0)

实际代码:

import tkinter as tk
from tkinter.filedialog import asksaveasfile
from tkinter import messagebox
from PIL import ImageTk, Image

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.ard_stat = read_json(JSON_PATH)
        self.switch_frame(StartPage)

    def switch_frame(self, frame_class):
        """Destroys current frame and replaces it with a new one."""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()


class StartPage(tk.Frame):
    def loopCap(self):
        with open(JSON_PATH) as json_file1:
            self.data = json.load(json_file1)
            #print(self.data)
        if self.data['status'] == 'ACTIVE': #and (self.data['RH_img']!= 'null' or self.data['LH_img']!= 'null')
            a = self.text.set(self.data['status'])
            b = self.text1.set(self.data['RH_cnt'])
            c = self.text2.set(self.data['LH_cnt'])
            d = self.text3.set(self.data['barcode'])
            return self.text, self.text1, self.text2, self.text3, self.data

    def next_save(self):
        new_string = self.data['barcode']
        new_folder = os.path.join(DATA_PATH,new_string)
        if os.path.exists(new_folder):
            #print("Folder Already Exists If Condition")
            tk.messagebox.showinfo("Info", "Folder Already Exists")
        else:
            #os.isfile(new_string)
            #print("Folder Already Exists")
            #tkMessageBox.showinfo("Info", "Folder Already Exists")
            #print("Make Directory Else Condition")
            json_dict = read_json(JSON_PATH)
            json_dict.update({"frontend_status": "True"})
            dump_to_json(json_dict, JSON_PATH)
            os.mkdir(new_folder)
            for i in range(0,len(data)):
                folder_name = os.path.join(DATA_PATH, new_string, data[i])
                os.mkdir(folder_name)
                files = [('All Files', '*.*'),
                         ('Python Files', '*.py'),
                         ('Text Document', '*.txt')]
                file = asksaveasfile(initialdir=folder_name, filetypes=files, defaultextension=files)
            json_dict = read_json(JSON_PATH)
            json_dict.update({"frontend_status": "False"})
            dump_to_json(json_dict, JSON_PATH)

            self.master.after(500, self.loopCap)

    def __init__(self, master):
        super().__init__(master)
        self.master.geometry("1000x700+%d+%d" % (((self.master.winfo_screenwidth() / 2.) - (1280 / 2.)), ((self.master.winfo_screenheight() / 2.) - (720 / 2.))))
        #self.master.state('zoomed')
        self.master.config(bg='powder blue')
        #myvar = self.master
        Frame1 = tk.Frame(self.master)
        Frame1.pack(side="bottom", fill="x", pady=10, anchor='w')
        Frame2 = tk.Frame(self.master)
        Frame2.pack(side="left", fill="both", pady=10, anchor='w', expand=True )
        photo = tk.PhotoImage(file="images/BG.jpg")
        label = tk.Label(Frame2, image=photo)
        label.image = photo
        label.place(x=0, y=0)
        tk.Label(Frame2, text='  Decal Check  ', font=('arial', 25, 'bold'), bg='powder blue',
                 fg='black', anchor='w').grid(column=0,pady=2)

        b = tk.Button(Frame2, text="Add New Files", command= self.next_save)
        b.grid(row=11, column=1, pady=5, sticky='w')

        self.master.after(500, self.loopCap)

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

这方面的建议会很有帮助

Suggestions on this will be really helpful

编辑根据建议的答案,我将 photo = tk.PhotoImage(file="images/BG.jpg") 用于 pngImageTk.PhotoImage(file="images/BG.jpg") 但每次我的屏幕显示如下图所示:

EDIT As per the suggested answer, I used photo = tk.PhotoImage(file="images/BG.jpg") for png and ImageTk.PhotoImage(file="images/BG.jpg") but every time my screen is dislayed as mentioned below image:

注意:我正在使用 Pycharm 检查我的窗口背景

NOTE: I am using Pycharm to check my Window Background

推荐答案

PhotoImage 类可以从文件中读取 GIF 和 PGM/PPM 图像:https://effbot.org/tkinterbook/photoimage.htm

The PhotoImage class can read GIF and PGM/PPM images from files: https://effbot.org/tkinterbook/photoimage.htm

请将您的 JPG 图像转换为适当的格式.

Please convert your JPG image to the appropriate format.

这篇关于无法使用 python 在 tkinter 中将图像显示为背景的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆