创建一个事件,检测布尔值是否为true以显示消息

时间:2015-05-06 14:15:12

标签: python qt pyside

我有一个GUI应用程序,可与通过USB连接的打印机配合使用。我现在所拥有的是在打印机连接到计算机时检测的代码。但我想要实现的是一个简单的托盘消息,只有当有人插入打印机时才会显示。

到目前为止,我使用的是QTimer,但问题是,当打印机仍在插入时,消息会一直显示,并且这不是我想要做的事情。在 True 中设置 setSingleShot 后,它会出现一次,但如果我拔下它并重新插入,则该消息不会出现。

我基本上寻找的是一种基于时间的事件,但不断检查,就像操作系统一样,无论何时插入打印机,它只会显示状态消息一次,而不是每次显示X秒。是否还有其他类型的事件我应该尝试获得我想要的结果?

编辑:以下是检测设备的代码:

import re, subprocess

DEVICE_RE = re.compile(".+ID\s(?P<id>\w+:\w+)")
# ...
def lsusb():
    # A python version of the command 'lsusb' that returns a list of connected usbids
    df = subprocess.check_output("lsusb", shell=True).decode('utf-8')
    devices = []
    for line in df.split('\n'):
        info = DEVICE_RE.match(line)
        if info:
            dinfo = info.groupdict()
            devices.append(dinfo['id'])
    return devices
# ...
def detect():
   usbs = lsusb()
   if '0a5f:000a' in usbs:
       return True

1 个答案:

答案 0 :(得分:0)

您可以使用状态机。

  • 陈述没有打印机
  • 状态检测到打印机
  • 状态打印机处于活动状态

使用QTimer,您可以检查lsusb是否找到了打印机。 如果找到,则更改为检测到,打开弹出窗口并更改为活动状态。 在状态激活状态下,您可以检查是否仍然可以找到打印机。如果没有,你会改回状态没有打印机。