python串口工具_串口调试工具(Python2.7+pyserial+Tkinter)

1 #! /usr/bin/env python

2 #-*- coding: utf-8 -*-

3

4 importTkinter as tk5 importttk6 importPyTkinter as pytk7 importAdaptive8

9 font =Adaptive.monaco_font10 size_dict =Adaptive.size_dict11 g_default_theme =pytk.g_default_theme12

13

14 classSerialToolUI(object):15 def __init__(self, master=None):16 self.root =master17 self.create_frame()18 self.thresholdValue = 1

19

20 defcreate_frame(self):21 '''

22 新建窗口,分为上下2个部分,下半部分为状态栏23 '''

24 self.frm =pytk.PyLabelFrame(self.root)25 self.frm_status =pytk.PyLabelFrame(self.root)26

27 self.frm.grid(row=0, column=0, sticky="wesn")28 self.frm_status.grid(row=1, column=0, sticky="wesn")29

30 self.create_frm()31 self.create_frm_status()32

33 defcreate_frm(self):34 '''

35 上半部分窗口分为左右2个部分36 '''

37 self.frm_left =pytk.PyLabelFrame(self.frm)38 self.frm_right =pytk.PyLabelFrame(self.frm)39

40 self.frm_left.grid(row=0, column=0, padx=5, pady=5, sticky="wesn")41 self.frm_right.grid(row=0, column=1, padx=5, pady=5, sticky="wesn")42

43 self.create_frm_left()44 self.create_frm_right()45

46 defcreate_frm_left(self):47 '''

48 上半部分左边窗口:49 Listbox显示可用的COM口50 Button按钮点击连接设备51 '''

52 self.frm_left_label =pytk.PyLabel(self.frm_left,53 text="Serial Ports",54 font=font)55 self.frm_left_listbox =pytk.PyListbox(self.frm_left,56 height=size_dict["list_box_height"],57 font=font)58 self.frm_left_serial_set =pytk.PyLabelFrame(self.frm_left)59 self.frm_left_btn =pytk.PyButton(self.frm_left,60 text="Open",61 font=font,62 command=self.Toggle)63

64 self.frm_left_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")65 self.frm_left_listbox.grid(row=1, column=0, padx=5, pady=5, sticky="wesn")66 self.frm_left_serial_set.grid(row=2, column=0, padx=5, pady=5, sticky="wesn")67 self.frm_left_btn.grid(row=3, column=0, padx=5, pady=5, sticky="wesn")68

69 self.frm_left_listbox.bind("", self.Open)70 self.create_frm_left_serial_set()71

72 defcreate_frm_left_serial_set(self):73 '''

74 串口配置,比如波特率,奇偶校验等75 '''

76 setting_label_list = ["BaudRate :", "Parity :", "DataBit :", "StopBit :"]77 baudrate_list = ["1200", "2400", "4800", "9600", "14400", "19200", "38400",78 "43000", "57600", "76800", "115200", "12800"]79 #PARITY_NONE, PARITY_EVEN, PARITY_ODD PARITY_MARK, PARITY_SPACE

80 parity_list = ["N", "E", "O", "M", "S"]81 bytesize_list = ["5", "6", "7", "8"]82 stopbits_list = ["1", "1.5", "2"]83 for index,item inenumerate(setting_label_list):84 frm_left_label_temp =pytk.PyLabel(self.frm_left_serial_set,85 text=item,86 font=('Monaco', 10))87 frm_left_label_temp.grid(row=index, column=0, padx=1, pady=2, sticky="e")88 self.frm_left_combobox_baudrate =ttk.Combobox(self.frm_left_serial_set,89 width=15,90 values=baudrate_list)91 self.frm_left_combobox_parity =ttk.Combobox(self.frm_left_serial_set,92 width=15,93 values=parity_list)94 self.frm_left_combobox_databit =ttk.Combobox(self.frm_left_serial_set,95 width=15,96 values=bytesize_list)97 self.frm_left_combobox_stopbit =ttk.Combobox(self.frm_left_serial_set,98 width=15,99 values=stopbits_list)100 self.frm_left_combobox_baudrate.grid(row=0, column=1, padx=2, pady=2, sticky="e")101 self.frm_left_combobox_parity.grid(row=1, column=1, padx=2, pady=2, sticky="e")102 self.frm_left_combobox_databit.grid(row=2, column=1, padx=2, pady=2, sticky="e")103 self.frm_left_combobox_stopbit.grid(row=3, column=1, padx=2, pady=2, sticky="e")104

105 self.frm_left_combobox_baudrate.current(3)106 self.frm_left_combobox_parity.current(0)107 self.frm_left_combobox_databit.current(3)108 self.frm_left_combobox_stopbit.current(0)109

110 defcreate_frm_right(self):111 '''

112 上半部分右边窗口:113 分为4个部分:114 1、Label显示和重置按钮和发送按钮115 2、Text显示(发送的数据)116 3、Label显示和十六进制选择显示和清除接收信息按钮117 4、Text显示接收到的信息118 '''

119 self.frm_right_reset =pytk.PyLabelFrame(self.frm_right)120 self.frm_right_send =pytk.PyText(self.frm_right,121 width=50,122 height=size_dict["send_text_height"],123 font=("Monaco", 9))124 self.frm_right_clear =pytk.PyLabelFrame(self.frm_right)125 self.frm_right_receive =pytk.PyText(self.frm_right,126 width=50,127 height=size_dict["receive_text_height"],128 font=("Monaco", 9))129

130 self.frm_right_reset.grid(row=0, column=0, padx=1, sticky="wesn")131 self.frm_right_send.grid(row=1, column=0, padx=1, sticky="wesn")132 self.frm_right_clear.grid(row=2, column=0, padx=1, sticky="wesn")133 self.frm_right_receive.grid(row=3, column=0, padx=1, sticky="wesn")134

135 self.frm_right_receive.tag_config("green", foreground="#228B22")136

137 self.create_frm_right_reset()138 self.create_frm_right_clear()139

140 defcreate_frm_right_reset(self):141 '''

142 1、Label显示和重置按钮和发送按钮143 '''

144 self.frm_right_reset_label =pytk.PyLabel(self.frm_right_reset,145 text="Data Send" + " "*size_dict["reset_label_width"],146 font=font)147 self.new_line_cbtn_var =tk.IntVar()148 self.send_hex_cbtn_var =tk.IntVar()149 self.frm_right_reset_newLine_checkbtn =pytk.PyCheckbutton(self.frm_right_reset,150 text="New Line",151 variable=self.new_line_cbtn_var,152 font=font)153 self.frm_right_reset_hex_checkbtn =pytk.PyCheckbutton(self.frm_right_reset,154 text="Hex",155 variable=self.send_hex_cbtn_var,156 font=font)157 self.frm_right_reset_btn =pytk.PyButton(self.frm_right_reset,158 text="Reset",159 width=10,160 font=font,161 command=self.Reset)162 self.frm_right_send_btn =pytk.PyButton(self.frm_right_reset,163 text="Send",164 width=10,165 font=font,166 command=self.Send)167

168 self.frm_right_reset_label.grid(row=0, column=0, sticky="w")169 self.frm_right_reset_newLine_checkbtn.grid(row=0, column=1, sticky="wesn")170 self.frm_right_reset_hex_checkbtn.grid(row=0, column=2, sticky="wesn")171 self.frm_right_reset_btn.grid(row=0, column=3, padx=5, pady=5, sticky="wesn")172 self.frm_right_send_btn.grid(row=0, column=4, padx=5, pady=5, sticky="wesn")173

174 defcreate_frm_right_clear(self):175 '''

176 3、Label显示和十六进制显示和清除接收信息按钮177 '''

178 self.receive_hex_cbtn_var =tk.IntVar()179 self.frm_right_clear_label =pytk.PyLabel(self.frm_right_clear,180 text="Data Received"+ " "*size_dict["clear_label_width"],181 font=font)182 self.frm_right_threshold_label =pytk.PyLabel(self.frm_right_clear,183 text="Threshold:",184 font=font)185 self.thresholdStr =tk.StringVar()186 self.frm_right_threshold_entry =pytk.PyEntry(self.frm_right_clear,187 textvariable=self.thresholdStr,188 width=6,189 font=font)190 self.frm_right_hex_checkbtn =pytk.PyCheckbutton(self.frm_right_clear,191 text="Hex",192 variable=self.receive_hex_cbtn_var,193 relief="flat",194 font=font)195 self.frm_right_clear_btn =pytk.PyButton(self.frm_right_clear,196 text="Clear",197 width=10,198 font=font,199 command=self.Clear)200

201 self.frm_right_clear_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")202 self.frm_right_threshold_label.grid(row=0, column=1, padx=5, pady=5, sticky="wesn")203 self.frm_right_threshold_entry.grid(row=0, column=2, padx=5, pady=5, sticky="wesn")204 self.frm_right_hex_checkbtn.grid(row=0, column=3, padx=5, pady=5, sticky="wesn")205 self.frm_right_clear_btn.grid(row=0, column=4, padx=5, pady=5, sticky="wesn")206

207 self.thresholdStr.set(1)208 self.thresholdStr.trace('w', self.GetThresholdValue)209

210 defcreate_frm_status(self):211 '''

212 下半部分状态栏窗口213 '''

214 self.frm_status_label =pytk.PyLabel(self.frm_status,215 text="Ready",216 font=font)217 self.frm_status_label.grid(row=0, column=0, padx=5, pady=5, sticky="wesn")218

219 defToggle(self):220 pass

221

222 defOpen(self, event):223 pass

224

225 defReset(self):226 self.frm_right_send.delete("0.0", "end")227

228 defSend(self):229 pass

230

231 defClear(self):232 self.frm_right_receive.delete("0.0", "end")233

234 def GetThresholdValue(self, *args):235 try:236 self.thresholdValue =int(self.thresholdStr.get())237 except:238 pass

239

240

241 if __name__ == '__main__':242 '''

243 main loop244 '''

245 root =tk.Tk()246 if g_default_theme == "dark":247 root.configure(bg="#292929")248 combostyle =ttk.Style()249 combostyle.theme_use('alt')250 combostyle.configure("TCombobox", selectbackground="#292929", fieldbackground="#292929",251 background="#292929", foreground="#FFFFFF")252 root.title("Serial-Tool")253 SerialToolUI(master=root)254 root.resizable(False, False)255 root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值