代码之家  ›  专栏  ›  技术社区  ›  Flame of udun

向窗口添加两次标签

  •  0
  • Flame of udun  · 技术社区  · 11 年前

    我正在制作一个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 只有一次。但是,在窗口中,它会显示两次:

    enter image description here

    如何删除第二个 USB Driver::u'usb-storage' ?

    2 回复  |  直到 11 年前
        1
  •  1
  •   drahnr    11 年前

    你正在打包 label 你的信号显然被发射了两次。尝试验证实际执行信号处理程序的频率。

    检查设备UUID或序列号,仅在UUID/序列号未知时添加标签。

        2
  •  0
  •   bmandesign    11 年前

    尝试:(我还没能测试)

    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()