python tk界面串口助手
时间: 2023-07-21 20:59:30 浏览: 109
python串口助手
下面是一个使用Python Tkinter库实现的串口助手界面的示例代码:
```python
import tkinter as tk
import serial
class SerialAssistant(tk.Tk):
def __init__(self):
super().__init__()
self.title("串口助手")
self.geometry("400x300")
self.serial_port = None
self.create_widgets()
def create_widgets(self):
# 串口号标签
port_label = tk.Label(self, text="串口号")
port_label.pack()
# 串口号下拉菜单
self.port_var = tk.StringVar()
port_combo = tk.OptionMenu(self, self.port_var, *self.get_serial_ports())
port_combo.pack()
# 打开串口按钮
open_button = tk.Button(self, text="打开串口", command=self.open_serial)
open_button.pack()
# 关闭串口按钮
close_button = tk.Button(self, text="关闭串口", command=self.close_serial, state=tk.DISABLED)
close_button.pack()
# 接收数据文本框
self.recv_text = tk.Text(self)
self.recv_text.pack()
# 发送数据标签
send_label = tk.Label(self, text="发送数据")
send_label.pack()
# 发送数据输入框
self.send_entry = tk.Entry(self)
self.send_entry.pack()
# 发送按钮
send_button = tk.Button(self, text="发送", command=self.send_data)
send_button.pack()
def get_serial_ports(self):
# 获取可用串口号
ports = []
for i in range(1, 21):
try:
s = serial.Serial('COM{}'.format(i))
s.close()
ports.append('COM{}'.format(i))
except (OSError, serial.SerialException):
pass
return ports
def open_serial(self):
# 打开串口
port = self.port_var.get()
if port:
try:
self.serial_port = serial.Serial(port, 9600, timeout=0.5)
self.recv_text.insert(tk.END, "成功打开串口 {}\n".format(port))
self.serial_port.flushInput()
self.after(100, self.read_serial_data)
self.update_serial_buttons_state(True)
except (OSError, serial.SerialException):
self.recv_text.insert(tk.END, "打开串口 {} 失败\n".format(port))
else:
self.recv_text.insert(tk.END, "请选择串口号\n")
def close_serial(self):
# 关闭串口
if self.serial_port:
self.serial_port.close()
self.serial_port = None
self.recv_text.insert(tk.END, "成功关闭串口\n")
self.update_serial_buttons_state(False)
def read_serial_data(self):
# 读取串口数据
if self.serial_port:
try:
data = self.serial_port.readline().decode('utf-8').strip()
if data:
self.recv_text.insert(tk.END, data + '\n')
except serial.SerialException:
self.recv_text.insert(tk.END, "串口读取失败\n")
self.close_serial()
self.after(100, self.read_serial_data)
def send_data(self):
# 发送数据到串口
if self.serial_port:
data = self.send_entry.get()
if data:
try:
self.serial_port.write(data.encode('utf-8'))
self.send_entry.delete(0, tk.END)
except serial.SerialException:
self.recv_text.insert(tk.END, "串口写入失败\n")
self.close_serial()
else:
self.recv_text.insert(tk.END, "请输入要发送的数据\n")
def update_serial_buttons_state(self, port_open):
# 更新串口按钮状态
if port_open:
self.port_var.set('')
self.send_entry.configure(state=tk.NORMAL)
self.send_entry.delete(0, tk.END)
self.send_entry.configure(state=tk.DISABLED)
else:
self.send_entry.configure(state=tk.DISABLED)
self.send_entry.delete(0, tk.END)
if __name__ == "__main__":
app = SerialAssistant()
app.mainloop()
```
这个示例代码实现了一个基于Tkinter的串口助手界面。界面包括一个下拉菜单用于选择串口号,打开和关闭串口的按钮,一个文本框用于显示接收到的串口数据,一个输入框用于输入要发送的数据,以及一个发送按钮。你可以根据实际需求进行修改和扩展。
阅读全文