Python 在窗口中添加两次标签

Python 在窗口中添加两次标签,python,gtk,pygtk,Python,Gtk,Pygtk,我正在使用pyudevI制作一个GUI程序来检测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

我正在使用pyudevI制作一个GUI程序来检测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驱动程序::u'USB-storage'

尝试:(我无法测试)


您正在打包
标签
两次,因为您的信号显然会被触发两次。尝试验证实际执行信号处理程序的频率


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

这看起来不像GTK+问题:找出为什么会获得2个设备添加信号,而不是隐藏症状。你还应该处理设备移除:你不知道是否有一些奇怪的设备被快速移除并重新添加。你只是改变了包装,这有什么帮助?
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()