【问题标题】:IMG2PY for background label and icon in TKINTERIMG2PY 用于 TKINTER 中的背景标签和图标
【发布时间】:2020-11-05 23:02:18
【问题描述】:

在一个带有背景和嵌入图标的 EXE 文件中工作,我阅读了一些关于使用 img2py 以创建可以使用 pyinstaller 导入 EXE 的 module.py 的想法。

我使用 img2py 成功创建了 imagebg.py(BG2.png 背景)和 imageico.py(ico2.ico 图标)模块。但是没有示例或方法可以将图像设置为 tkinter 标签中的模块作为背景,并将图标设置为代码。

请任何人都可以帮助我。

必须导入 BG 和 ICON 模块的主代码,并将它们用作 tkinter GUI 的背景和图标图像

#Main code GUI tkinter

import imagebg #from here we must import PNG_File.png for Background
import imageico #from here we must import ICO_File.ico for Icon
import wx #from img2py installation

from tkinter import *
root=Tk()

#set windows size
root.resizable(width=False, height=False)
root.geometry("925x722")

#set title
root.title("SOFT1)")

#frame 1
f1=Frame(root, width=345,height=475,bg="light 
grey",highlightbackground="black",highlightthickness=4)
f1.place(x=20,y=235)

#set a image as BG
Logo=PhotoImage(file="PNG_File.png")
lab6=Label(root, image=Logo)
lab6.place(x=0, y=0)

#set a image as ICON
root.iconbitmap("ICO_File.ico")

mainloop()

IMG2PY生成的背景模块imagebg.py

BG2 = PyEmbeddedImage(
    b'iVBORw0KGgoAAAANSUhEUgAAAsUAAAKECAIAAABgrdCGAAAACXBIWXMAAA7EAAAOxAGVKw4b'
    b'AAAgAElEQVR4nOzdd2Ab5d0H8Oe0hy1vecYjcZw4cfYimwQIEEbYhQJlFgqU3UFZLR2M9i2l'
    b'tLRlFcouI5Qww15hZJEdO4kdOx7xtiVrj7v3DwdFlmXppu4kfT9/Wfbdc78YY339TMrpdBIA'
    b'AAAAAVRyFwAAAABJD3kCAAAAhEKeAAAAAKGQJwAAAEAo5AkAAAAQCnkCAAAAhEKeAAAAAKGQ'
    b'JwAAAEAo5AkAAAAQCnkCAAAAhEKeAAAAAKGQJwAAAEAo5AkAAAAQCnkCAAAAhEKeAAAAAKGQ'
    b'JwAAAEAo5AkAAAAQCnkCAAAAhEKeA..... to much characters to be placed in this post

IMG2PY生成图标的模块imageico.py

from wx.lib.embeddedimage import PyEmbeddedImage

ico2 = PyEmbeddedImage(
    b'iVBORw0KGgoAAAANSUhEUgAAAsUAAAKECAYAAADvz0fRAAAABHNCSVQICAgIfAhkiAAAIABJ'
    b'REFUeJzs3WeAVNXdBvDnTi/b+7L0svSmIIKd2Gus0ZhiSeKreZOYmGpL15i8SdTEFKMpGkss'
    b'GEuMqNFYsCAgHRZYWFiWsn12p7f7fkBwy8zszC1z7537/L7ozs6c82dh4dkz/3OOEAgERBAR'
    b'ERERmZhF6wKIiIiIiLTGUExEREREpsdQTERERESmx1BMRERERKbHUExEREREpsdQTERERESm'
    b'x1BMRERERKbHUExEREREpsdQTERERESmx1BMRERERKbHUExEREREpsdQTERERESmx1BMRERE'
    b'RKbHUExEREREps.... to much characters to be placed in this post

请了解如何在主代码 GUI Tkinter 中将模块用作背景图像和图标

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    如果您想在tkinter 应用程序中使用wx.Image,则需要将wx.Image 兼容图像转换为PIL

    以下是基于您发布的代码的示例:

    import tkinter as tk
    from PIL import Image, ImageTk
    import imagebg
    import imageico
    
    # function to convert a wx.Image to PIL.ImageTk.PhotoImage
    def wx2pil(wx_image):
        image = wx_image.Image
        w, h = image.GetWidth(), image.GetHeight()
        data = image.GetData()
    
        img = Image.frombytes('RGB', (w, h), bytes(data))
        return ImageTk.PhotoImage(img)
    
    root = tk.Tk()
    root.resizable(False, False)
    root.geometry('925x722')
    root.title('SOFT1')
    # use iconphoto() instead of iconbitmap()
    root.iconphoto(False, wx2pil(imageico.ico2))
    
    #set a image as BG
    logo = wx2pil(imagebg.BG2)
    tk.Label(root, image=logo).place(x=0, y=0)
    
    #frame 1
    f1 = tk.Frame(root, width=345, height=475, bg='lightgray', highlightbackground='black', highlightthickness=4)
    f1.place(x=20, y=235)
    
    root.mainloop()
    

    请注意,我使用的是wxPython v4.1.0。

    由于它依赖于 wxPython,为什么不直接使用wxPython 作为 GUI 而不是 tkinter

    【讨论】:

    • 感谢 acw1668,您的帮助真是太棒了。我创建了要在我的 PC 上运行的代码,但现在我有超过 2000 行代码在 Python 和 mi PC 下完美运行,当我决定创建一个 EXE 时出现了所有问题,所以这种情况教会了我其他新的方法来做到这一点更好的是,其中一个和你所说的一样是使用 wxPhython 而不是 Tkinter。让我试试你的建议,我会评论你的结果。
    • Acw1668 再次感谢您,您的解决方案简洁而完美。最后,我将我的 exe 创建为独立的。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多