我正在制作一个GUI程序来使用pyudevI来检测usb连接。这是代码:
import gtk
from pyudev import Context,Monitor
from pyudev.glib import GUDevMonitorObserver
import usb.core
import usb.util
import sys
class Project:
window = gtk.Window()
vbox= gtk.VBox(False, 5)
def __init__(self):
self.window.set_default_size(300, 300)
label = gtk.Label("Please plug the device")
self.vbox.pack_start(label)
self.window.add(self.vbox)
self.window.show_all()
context = Context()
monitor = Monitor.from_netlink(context)
monitor.filter_by(subsystem='block',device_type='disk')
observer = GUDevMonitorObserver(monitor)
def device_connected(observer, device):
property_name = device.__getitem__('ID_USB_DRIVER')
label = gtk.Label('USB Driver::{0!r}'.format(property_name))
Project.vbox.pack_start(label)
Project.window.show_all()
observer.connect("device-added",device_connected)
monitor.start()
Project()
gtk.main()
正如您将注意到的那样,新标签仅包含在Project.vbox
中。但是在窗口中,它会显示两次:
如何删除第二个USB Driver::u'usb-storage'
?
答案 0 :(得分:1)
您正在打包label
两次,因为您的信号显然会被解雇两次。尝试验证信号处理程序实际执行的频率。
检查设备UUID或序列号,如果UUID / serial未知,则仅添加标签。
答案 1 :(得分:0)
尝试:(我无法测试)
def device_connected(observer, device):
property_name = device.__getitem__('ID_USB_DRIVER')
label = gtk.Label('USB Driver::{0!r}'.format(property_name))
Project.vbox.pack_start(label,expand=False)
Project.window.show_all()