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

Make an event where that detects if a boolean becomes true to display a message

我有一个 GUI 应用程序,可用于通过 USB 连接的打印机。我现在得到的是每当打印机连接到计算机时检测的代码。但我想要实现的是一个简单的托盘消息,它仅在有人插入打印机时显示。

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

我基本上要寻找的是一种基于时间的事件,但它会不断检查,就像在 OS 上一样,每当您插入打印机时,它只会显示一次状态消息,而不是每次 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

你可以使用状态机。

  • 声明没有打印机
  • 状态检测到打印机
  • 状态打印机活动

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