Python 完整代码:屏幕窗口区域小车移动 - 匀速、速度调节、托盘功能
以下是用 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.png、tray_icon.png 和 window_icon.png 替换为实际的小车图片、托盘图标和窗口图标文件路径。
原文地址: https://www.cveoy.top/t/topic/bKw4 著作权归作者所有。请勿转载和采集!