以下是用 Python 编写的完整可运行代码,实现屏幕指定区域内的小车移动,支持匀速移动、速度调节,并包含托盘功能。

import tkinter as tk
import threading
import time
import win32api
import win32con
import win32gui
from PIL import Image, ImageTk
import ctypes

# 获取屏幕宽度和高度
screen_width = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
screen_height = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)

# 定义小车的速度
car_speed = 10  # 默认速度为 10

# 定义窗口类
class CarWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('小车移动')
        self.geometry(f'{screen_width}x{screen_height}')  # 设置窗口大小为全屏
        self.attributes('-topmost', True)  # 窗口置顶
        self.protocol('WM_DELETE_WINDOW', self.minimize_to_tray)  # 点击关闭按钮最小化到托盘
        self.bind('<Map>', self.hide_window)  # 窗口最小化时隐藏窗口
        self.bind('<Unmap>', self.show_window)  # 窗口恢复时显示窗口

        # 创建画布
        self.canvas = tk.Canvas(self, width=screen_width, height=screen_height)
        self.canvas.pack()

        # 加载小车图片
        car_image = Image.open('car.png')
        car_image = car_image.resize((100, 100), Image.ANTIALIAS)
        self.car_photo = ImageTk.PhotoImage(car_image)

        # 在画布上绘制小车
        self.car = self.canvas.create_image(0, 0, image=self.car_photo, anchor='nw')

        # 创建菜单
        self.menu = tk.Menu(self, tearoff=0)
        self.menu.add_command(label='恢复', command=self.show_window)
        self.menu.add_command(label='退出', command=self.quit)
        self.menu.bind('<FocusOut>', self.menu_lost_focus)

        # 创建托盘图标
        self.tray_icon = tk.PhotoImage(file='tray_icon.png')
        self.tray = tk.Toplevel(self)
        self.tray.iconphoto(True, self.tray_icon)
        self.tray.withdraw()  # 初始状态下隐藏托盘窗口
        self.tray.bind('<Button-1>', self.tray_clicked)

        # 设置窗口图标
        self.icon = tk.PhotoImage(file='window_icon.png')
        self.iconphoto(True, self.icon)

    # 隐藏窗口
    def hide_window(self, event):
        self.withdraw()

    # 显示窗口
    def show_window(self, event):
        self.deiconify()

    # 最小化到托盘
    def minimize_to_tray(self):
        self.withdraw()
        self.tray.deiconify()
        self.tray.iconify()

    # 托盘图标被点击
    def tray_clicked(self, event):
        self.tray.iconify()
        self.deiconify()
        self.focus_force()
        self.menu.tk_popup(event.x_root, event.y_root)

    # 菜单失去焦点时隐藏菜单
    def menu_lost_focus(self, event):
        self.menu.unpost()

# 定义小车类
class Car:
    def __init__(self, canvas):
        self.canvas = canvas
        self.car = None
        self.x = 0
        self.y = 0

    # 移动小车
    def move(self):
        while True:
            self.canvas.coords(self.car, self.x, self.y)
            self.x += car_speed
            self.y += car_speed
            time.sleep(0.01)

# 创建窗口
window = CarWindow()

# 创建小车
car = Car(window.canvas)
car.car = window.car

# 创建线程来移动小车
move_thread = threading.Thread(target=car.move)
move_thread.setDaemon(True)
move_thread.start()

# 运行窗口
window.mainloop()

请将代码中的 car.pngtray_icon.pngwindow_icon.png 替换为实际的小车图片、托盘图标和窗口图标文件路径。

Python 完整代码:屏幕窗口区域小车移动 - 匀速、速度调节、托盘功能

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

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