项目地址:USB-HID-TEST
整体预览图(win8下的效果):
======================
项目结构:
COM
--hidHelper.py
--usbHelper.py
UI
--Adaptive.py
--HID_TESTUI.py
--PyTkinter.py
main.py
======================
UI文件夹:
使用PyTkinter来初始化一些颜色配置(个人喜好)
实现代码:
1
#
! /usr/bin/env python
2
#
-*- coding: utf-8 -*-
3
4
‘‘‘
5
Tkinter控件初始化配置(默认为深色)
6
‘‘‘
7
__author__ = "jakey.chen" 8__version__ = "v1.0" 9 10 11import Tkinter as tk
12 13 g_default_theme = "dark" 14# g_default_theme = "default" 15 16class PyButton(tk.Button):
17‘‘‘ 18 Button
19‘‘‘ 20def__init__(self, master, theme=g_default_theme, **kv):
21 self.theme = theme
22 self.kv = kv
23 self.temp = dict()
24 self.choose_theme()
25 tk.Button.__init__(self, master, self.temp)
26 27def choose_theme(self):
28if self.theme == "dark":
29 dark_theme_dict = {
30"activebackground": "#00B2EE",
31"activeforeground": "#E0EEEE",
32"bg": "#008B8B",
33"fg": "#FFFFFF" 34 }
35for key,value in dark_theme_dict.items():
36 self.temp[key] = value
37 38for key,value in self.kv.items():
39 self.temp[key] = value
40 41class PyLabel(tk.Label):
42‘‘‘ 43 Label
44‘‘‘ 45def__init__(self, master, theme=g_default_theme, **kv):
46 self.theme = theme
47 self.kv = kv
48 self.temp = dict()
49 self.choose_theme()
50 tk.Label.__init__(self, master, self.temp)
51 52def choose_theme(self):
53if self.theme == "dark":
54 dark_theme_dict = {
55"bg": "#292929",
56"fg": "#E0EEEE" 57 }
58for key,value in dark_theme_dict.items():
59 self.temp[key] = value
60 61for key,value in self.kv.items():
62 self.temp[key] = value
63 64class PyLabelFrame(tk.LabelFrame):
65‘‘‘ 66 Frame
67‘‘‘ 68def__init__(self, master, theme=g_default_theme, **kv):
69 self.theme = theme
70 self.kv = kv
71 self.temp = dict()
72 self.choose_theme()
73 tk.LabelFrame.__init__(self, master, self.temp)
74 75def choose_theme(self):
76if self.theme == "dark":
77 dark_theme_dict = {
78"bg": "#292929",
79"fg": "#1E90FF" 80 }
81for key,value in dark_theme_dict.items():
82 self.temp[key] = value
83 84for key,value in self.kv.items():
85 self.temp[key] = value
86 87class PyListbox(tk.Listbox):
88‘‘‘ 89 Listbox
90‘‘‘ 91def__init__(self, master, theme=g_default_theme, **kv):
92 self.theme = theme
93 self.kv = kv
94 self.temp = dict()
95 self.choose_theme()
96 tk.Listbox.__init__(self, master, self.temp)
97 98def choose_theme(self):
99if self.theme == "dark":
100 dark_theme_dict = {
101"bg": "#292929",
102"fg": "#1E90FF",
103"selectbackground": "#00B2EE"104 }
105for key,value in dark_theme_dict.items():
106 self.temp[key] = value
107108for key,value in self.kv.items():
109 self.temp[key] = value
110111class PyText(tk.Text):
112‘‘‘113 Text
114‘‘‘115def__init__(self, master, theme=g_default_theme, **kv):
116 self.theme = theme
117 self.kv = kv
118 self.temp = dict()
119 self.choose_theme()
120 tk.Text.__init__(self, master, self.temp)
121122def choose_theme(self):
123if self.theme == "dark":
124 dark_theme_dict = {
125"bg": "#292929",
126"fg": "#1E90FF"127 }
128for key,value in dark_theme_dict.items():
129 self.temp[key] = value
130131for key,value in self.kv.items():
132 self.temp[key] = value
133134class PyCheckbutton(tk.Checkbutton):
135‘‘‘136 Checkbutton
137‘‘‘138def__init__(self, master, theme=g_default_theme, **kv):
139 self.theme = theme
140 self.kv = kv
141 self.temp = dict()
142 self.choose_theme()
143 tk.Checkbutton.__init__(self, master, self.temp)
144145def choose_theme(self):
146if self.theme == "dark":
147 dark_theme_dict = {
148"bg": "#292929",
149"fg": "#FFFFFF",
150"activebackground": "#292929",
151"activeforeground": "#FFFFFF",
152"selectcolor": "#292929"153 }
154for key,value in dark_theme_dict.items():
155 self.temp[key] = value
156157for key,value in self.kv.items():
158 self.temp[key] = value
159160class PyRadiobutton(tk.Radiobutton):
161‘‘‘162 Radiobutton
163‘‘‘164def__init__(self, master, theme=g_default_theme, **kv):
165 self.theme = theme
166 self.kv = kv
167 self.temp = dict()
168 self.choose_theme()
169 tk.Radiobutton.__init__(self, master, self.temp)
170171def choose_theme(self):
172if self.theme == "dark":
173 dark_theme_dict = {
174"bg": "#292929",
175"fg": "#FFFFFF",
176"activebackground": "#292929",
177"selectcolor": "#292929"178 }
179for key,value in dark_theme_dict.items():
180 self.temp[key] = value
181182for key,value in self.kv.items():
183 self.temp[key] = value
184185186class PyEntry(tk.Entry):
187‘‘‘188 Entry
189‘‘‘190def__init__(self, master, theme=g_default_theme, **kv):
191 self.theme = theme
192 self.kv = kv
193 self.temp = dict()
194 self.choose_theme()
195 tk.Entry.__init__(self, master, self.temp)
196197def choose_theme(self):
198if self.theme == "dark":
199 dark_theme_dict = {
200"bg": "#292929",
201"fg": "#E0EEEE",
202"insertbackground": "#E0EEEE"203 }
204for key,value in dark_theme_dict.items():
205 self.temp[key] = value
206207for key,value in self.kv.items():
208 self.temp[key] = value
209210if__name__ == ‘__main__‘:
211 root = tk.Tk()
212 root.configure(bg="#292929")
213 PyButton(root, text="1234", font=("Monaco", 12)).pack()
214 PyLabel(root, text="123", font=("Monaco", 15)).pack()
215 PyCheckbutton(root, text="123", font=("Monaco", 15)).pack()
216 PyEntry(root, font=("Monaco", 15)).pack()
217 PyText(root, font=("Monaco", 15), height=2, width=20).pack()
218 listbox_0 = PyListbox(root, height=2, font=("Monaco", 15))
219 listbox_0.pack()
220for i in range(2):
221 listbox_0.insert("end", i)
222 radio_intvar = tk.IntVar()
223 PyRadiobutton(root, text="001", variable=radio_intvar, value=0, font=("Monaco", 15)).pack()
224 PyRadiobutton(root, text="002", variable=radio_intvar, value=1, font=("Monaco", 15)).pack()
225 radio_intvar.set(1)
226227 root.mainloop()
主界面构建不表,使用LabelFrame通过grid布局组成
具体自行查看项目代码
======================
COM文件夹
Windows下:
使用pywinusb
1
#
! /usr/bin/env python
2
#
-*- coding: utf-8 -*-
3
4
‘‘‘
5
win下使用的HID设备通讯帮助类
6
‘‘‘
7
__author__ = "jakey.chen" 8__version__ = "v1.0" 91011import pywinusb.hid as hid
121314class hidHelper(object):
15def__init__(self, vid=0x1391, pid=0x2111):
16 self.alive = False
17 self.device = None
18 self.report = None
19 self.vid = vid
20 self.pid = pid
2122def start(self):
23‘‘‘24 开始,打开HID设备
25‘‘‘26 _filter = hid.HidDeviceFilter(vendor_id = self.vid, product_id = self.pid)
27 hid_device = _filter.get_devices()
28if len(hid_device) > 0:
29 self.device = hid_device[0]
30 self.device.open()
31 self.report = self.device.find_output_reports()
32 self.alive = True
3334def stop(self):
35‘‘‘36 停止,关闭HID设备
37‘‘‘38 self.alive = False
39if self.device:
40 self.device.close()
4142def setcallback(self):
43‘‘‘44 设置接收数据回调函数
45‘‘‘46if self.device:
47 self.device.set_raw_data_handler(self.read)
4849def read(self, data):
50‘‘‘51 接收数据回调函数
52‘‘‘53print([hex(item).upper() for item in data[1:]])
5455def write(self, send_list):
56‘‘‘57 向HID设备发送数据
58‘‘‘59if self.device:
60if self.report:
61 self.report[0].set_raw_data(send_list)
62 bytes_num = self.report[0].send()
63return bytes_num
646566if__name__ == ‘__main__‘:
67 myhid = hidHelper()
68 myhid.start()
69if myhid.alive:
70 myhid.setcallback()
71 send_list = [0x00 for i in range(65)]
72 myhid.write(send_list)
73import time
74 time.sleep(0.5)
75 myhid.stop()
Linux(我使用的是Ubuntu14.04)下:
1
#
! /usr/bin/env python
2
#
-*- coding: utf-8 -*-
3
4
‘‘‘
5
linux下使用的usb设备通讯帮助类
6
‘‘‘
7
__author__ = "jakey.chen" 8__version__ = "v1.0" 9 10 11import threading
12import usb.util
13import usb.core
14 15 16class usbHelper(object):
17def__init__(self, vid=0x1391, pid=0x2111):
18 self.alive = False
19 self.handle = None
20 self.size = 64
21 self.vid = vid
22 self.pid = pid
23 24def start(self):
25‘‘‘ 26 开始,打开usb设备
27‘‘‘ 28 self.dev = usb.core.find(idVendor=self.vid, idProduct=self.pid)
29if self.dev != None:
30 self.ep_in = self.dev[0][(0,0)][0].bEndpointAddress
31 self.ep_out = self.dev[0][(0,0)][1].bEndpointAddress
32 self.size = self.dev[0][(0,0)][1].wMaxPacketSize
33 self.open()
34 self.alive = True
35 36def stop(self):
37‘‘‘ 38 停止,关闭usb设备,释放接口
39‘‘‘ 40 self.alive = False
41if self.handle:
42 self.handle.releaseInterface()
43 44def open(self):
45‘‘‘ 46 打开usb设备
47‘‘‘ 48 busses = usb.busses()
49for bus in busses:
50 devices = bus.devices
51for device in devices:
52if device.idVendor == self.vid and device.idProduct == self.pid:
53 self.handle = device.open()
54# Attempt to remove other drivers using this device. 55if self.dev.is_kernel_driver_active(0):
56try:
57 self.handle.detachKernelDriver(0)
58except Exception as e:
59 self.alive = False
60try:
61 self.handle.claimInterface(0)
62except Exception as e:
63 self.alive = False
64 65def read(self, size=64, timeout=0):
66‘‘‘ 67 读取usb设备发过来的数据
68‘‘‘ 69if size >= self.size:
70 self.size = size
71 72if self.handle:
73 data = self.handle.interruptRead(self.ep_in, self.size, timeout)
74 75try:
76 data_list = data.tolist()
77return data_list
78except:
79return list()
80 81def write(self, send_list, timeout=1000):
82‘‘‘ 83 发送数据给usb设备
84‘‘‘ 85if self.handle:
86 bytes_num = self.handle.interruptWrite(self.ep_out, send_list, timeout)
87return bytes_num
88 89if__name__ == ‘__main__‘:
90import time
91 dev = usbHelper()
92 93 dev.start()
94 95 send_list = [0xAA for i in range(64)]
96 dev.write(send_list)
97# time.sleep(0.25) 98while True:
99try:
100 mylist = dev.read()
101print mylist
102if mylist[1] == 0x02:
103break104except:
105 dev.stop()
106break107 dev.stop()
======================
主函数:界面逻辑。不表,自行查看。
原文:http://www.cnblogs.com/jakeyChen/p/4463530.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!