以下代码使用 Python 编写的,实现了一个小车在窗口内从左上角移动到右下角的动画效果,同时支持将程序最小化到系统托盘,并提供恢复和退出功能:

import tkinter as tk
from PIL import ImageTk, Image
import threading
import sys

class CarGUI(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Car Moving')
        self.geometry('500x500')
        self.iconbitmap('car_icon.ico')
        self.protocol('WM_DELETE_WINDOW', self.hide_to_tray)

        self.canvas = tk.Canvas(self, width=500, height=500)
        self.canvas.pack()

        self.car_image = ImageTk.PhotoImage(Image.open('car.png').resize((50, 50)))
        self.car_id = self.canvas.create_image(25, 25, image=self.car_image, anchor='nw')

        self.speed = 2
        self.direction = 'right'
        self.move_car()

    def move_car(self):
        x1, y1, x2, y2 = self.canvas.bbox(self.car_id)

        if self.direction == 'right':
            if x2 < 500:
                self.canvas.move(self.car_id, self.speed, 0)
                self.after(10, self.move_car)
            else:
                self.direction = 'down'
                self.move_car()
        elif self.direction == 'down':
            if y2 < 500:
                self.canvas.move(self.car_id, 0, self.speed)
                self.after(10, self.move_car)
            else:
                self.direction = 'stop'

    def hide_to_tray(self):
        self.withdraw()

        def show():
            self.deiconify()
            self.tray_menu.destroy()

        def exit_program():
            self.destroy()

        self.tray_menu = tk.Menu(self, tearoff=0)
        self.tray_menu.add_command(label='恢复', command=show)
        self.tray_menu.add_command(label='退出', command=exit_program)

        self.tray_icon = tk.PhotoImage(file='tray_icon.png')
        self.tray = tk.Toplevel()
        self.tray.title('Tray')
        self.tray.iconbitmap('tray_icon.ico')
        self.tray.geometry('0x0')
        self.tray.wm_attributes('-topmost', True)
        self.tray.wm_attributes('-transparentcolor', 'white')

        self.tray.iconphoto(False, self.tray_icon)
        self.tray.bind('<Button-1>', show)
        self.tray.bind('<Button-3>', lambda e: self.tray_menu.post(e.x_root, e.y_root))

        self.tray.mainloop()

if __name__ == '__main__':
    car_gui = CarGUI()
    car_gui.mainloop()

运行这段代码需要准备以下文件:

  1. car_icon.ico:程序的图标文件,可以使用任意 ico 文件,将其命名为 car_icon.ico 并与代码放在同一目录下。
  2. car.png:小车的图片文件,可以使用任意 png 文件,将其命名为 car.png 并与代码放在同一目录下。
  3. tray_icon.png:程序在托盘区的图标文件,可以使用任意 png 文件,将其命名为 tray_icon.png 并与代码放在同一目录下。

将上述代码保存为 car_gui.py,并在命令行中运行以下命令启动程序:

python car_gui.py

程序将在屏幕上显示一个窗口,其中有一辆小车从左上角开始沿着窗口向右下角匀速移动。可以通过右键点击托盘区的图标来恢复窗口显示,点击退出则程序退出内存,停止运行。


原文地址: https://www.cveoy.top/t/topic/bJma 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录