105 lines
3.1 KiB
Python
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()
|