Python tkinter任务栏图标,图片背景透明

知道你们连Github都懒得打开所以在这里放上你们想用的代码 

完整代码见上篇文章:Python tkinter界面设计,开源的Python Tk应用程序,U盘修复工具-CSDN博客


目录

任务栏图标

图片背景透明

任务栏图标

首先是任务栏图标,在Python的Tkinter库中,要设置应用程序在任务栏(Windows系统托盘)上的图标,可以使用tkintertix模块或者第三方库如pywin32pystray等来实现。由于原生Tkinter并不直接支持系统托盘图标,但可以通过一些间接方式来达到目的。我们这里使用第三方库pystray。

安装pystray库:

pip install pystray

U盘修复中使用的方法:

global tray_icon  # 全局变量

......


# 创建系统托盘图标
def create_tray_icon():
    show_info()  # 最小化提示
    # 从图片文件中加载图标
    image = Image.open("Pictures/ICON.ico")

    # 创建系统托盘菜单
    menu = (
        pystray.MenuItem("打开U盘修复", lambda: open_app()),
        pystray.MenuItem("退出", lambda: exit_app())
    )

    # 创建系统托盘图标
    global tray_icon
    tray_icon = pystray.Icon("app_name", image, "U盘修复", menu)

    # 设置图标的提示文本
    tray_icon.tooltip = "U盘修复2.0"

    # 显示系统托盘图标
    tray_icon.run()


# 点击“打开应用”菜单项的事件处理函数
def open_app():
    global tray_icon  # 引用全局变量

    # 关闭托盘图标
    tray_icon.stop()
    # 这里使用subprocess启动主窗口,因为之前我们关闭了主窗口,所以要再次启动一边
    subprocess.Popen(["U盘修复2.0.exe"])  # 应用程序的实际路径


# 点击“退出”菜单项的事件处理函数
def exit_app():
    global tray_icon  # 引用全局变量

    # 关闭托盘图标并退出程序
    tray_icon.stop()
    sys.exit(0)
    # 正常退出


if __name__ == "__main__":
    ui = Ui_MainWindow()
    create_tray_icon()  # 退出就创建系统托盘图标

但是我过后发现,这样主窗口是已经关闭了,要再启动一次程序,所以今天我改了一下,隐藏窗口然后再显示:

global tray_icon  # 全局变量

# 我们在def __init__(self):下加上

class Ui_MainWindow:
    def __init__(self):
        # 创建主窗口
        self.window = tk.Tk()
        ......
        def create_tray_icon():
            self.window.withdraw()  # 隐藏主窗口但不退出程序

            # 创建系统托盘图标
            show_info()  # 最小化提示
            # 从图片文件中加载图标
            image = Image.open("Pictures/ICON.ico")

            # 创建系统托盘菜单
            menu = (
                pystray.MenuItem("打开U盘修复", lambda: open_app()),
                pystray.MenuItem("退出", lambda: exit_app())
            )

            # 创建系统托盘图标
            global tray_icon
            tray_icon = pystray.Icon("app_name", image, "U盘修复", menu)

            # 设置图标的提示文本
            tray_icon.tooltip = "U盘修复2.0"

            # 显示系统托盘图标
            tray_icon.run()

        # 点击“打开应用”菜单项的事件处理函数
        def open_app():
            global tray_icon  # 引用全局变量

            # 关闭托盘图标
            tray_icon.stop()

            # 显示已隐藏的主窗口
            self.window.deiconify()

        # 点击“退出”菜单项的事件处理函数
        def exit_app():
            global tray_icon  # 引用全局变量

            # 关闭托盘图标并退出程序
            tray_icon.stop()
            os._exit(0)
            # 立即终止整个Python解释器

        # 绑定关闭事件,当点击关闭按钮时隐藏窗口而不是退出程序
        self.window.protocol("WM_DELETE_WINDOW", create_tray_icon)

        self.window.mainloop()

这样就不会退出后需要用subprocess启动主窗口了


图片背景透明

def crop_white_background(image_path):
    # 打开图像
    image = Image.open(image_path)
    # 转换为RGBA模式,以支持透明度
    image = image.convert("RGBA")

    # 获取图像的宽度和高度
    width, height = image.size
    # 遍历每个像素点,将白色背景的像素设为透明
    for x in range(width):
        for y in range(height):
            r, g, b, a = image.getpixel((x, y))
            if r == 255 and g == 255 and b == 255:  # 判断是否为白色背景
                image.putpixel((x, y), (255, 255, 255, 0))  # 将白色背景设为透明

    # 裁剪图像,去除透明边缘
    cropped_image = image.crop(image.getbbox())

    # 保存裁剪后的图像
    cropped_image.save("")

# 透明图片,你也可以用这个方法做一个启动画面
TRANSCOLOUR = 'gray'  # 'gray'为透明色 ( 我称为心灵的窗户)
self.window.wm_attributes("-transparentcolor", TRANSCOLOUR)  # 设置'gray'为透明色

photo = ImageTk.PhotoImage(file=r"Pictures/USB flash drive.png")
label = Label(self.window, image=photo, bg=TRANSCOLOUR)
label.place(x=50, y=20, anchor=tk.NW)

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值