标签已添加两次到窗口

时间:2014-03-17 04:21:11

标签: python gtk pygtk

我正在制作一个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 个答案:

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