Files
Loongson_2k0300_SmartCar/udp_receive/slider.py
T

105 lines
3.1 KiB
Python

'''
Author: ilikara 3435193369@qq.com
Date: 2025-03-11 03:00:45
LastEditors: Ilikara 3435193369@qq.com
LastEditTime: 2025-03-11 17:04:09
FilePath: /2k300_smartcar/udp_receive/slider.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import tkinter as tk
import socket
import struct
# 配置参数
TARGET_IP = "192.168.43.238" # 目标板卡IP
TARGET_PORT = 8888 # 目标端口
class UdpSliderApp:
def __init__(self, master):
self.master = master
master.title("Dual Slider Control")
# 创建UDP socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 滑块1
self.slider1_frame = tk.Frame(master)
self.slider1_frame.pack(pady=10)
self.label1 = tk.Label(self.slider1_frame, text="Angle: 0.00")
self.label1.pack(side=tk.LEFT)
self.slider1 = tk.Scale(
self.slider1_frame,
from_=-7.0, to=7.0,
resolution=0.01,
orient=tk.HORIZONTAL,
length=300,
command=lambda v: self.send_values()
)
self.slider1.pack(side=tk.LEFT)
# 滑块2
self.slider2_frame = tk.Frame(master)
self.slider2_frame.pack(pady=10)
self.label2 = tk.Label(self.slider2_frame, text="Speed: 0.00")
self.label2.pack(side=tk.LEFT)
self.slider2 = tk.Scale(
self.slider2_frame,
from_=-20.0, to=20.0, # 示例范围可调
resolution=0.1,
orient=tk.HORIZONTAL,
length=300,
command=lambda v: self.send_values()
)
self.slider2.pack(side=tk.LEFT)
# 退出按钮
self.exit_btn = tk.Button(
master,
text="Exit",
command=master.quit,
bg="#ff4444",
fg="white"
)
self.exit_btn.pack(pady=20)
self.reset_btn = tk.Button(
self.slider2_frame,
text="Reset to 0",
command=self.reset_slider2,
bg="#ff6666",
fg="white",
width=8
)
self.reset_btn.pack(side=tk.LEFT, padx=10)
def send_values(self):
"""打包并发送两个浮点数"""
try:
val1 = float(self.slider1.get())
val2 = float(self.slider2.get())
# 更新标签
self.label1.config(text=f"Angle: {val1:.2f}")
self.label2.config(text=f"Speed: {val2:.2f}")
# 打包为网络字节序的两个float
data = struct.pack('!ff', val1, val2) # !表示网络字节序
# 发送UDP数据
self.sock.sendto(data, (TARGET_IP, TARGET_PORT))
except Exception as e:
print(f"发送错误: {str(e)}")
def reset_slider2(self):
self.slider2.set(0.0) # 设置滑块物理位置
self.label2.config(text="Slider2: 0.00") # 直接更新显示
self.send_values() # 手动触发发送
if __name__ == "__main__":
root = tk.Tk()
app = UdpSliderApp(root)
root.mainloop()
app.sock.close()