我有一个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
答案 0 :(得分:0)
您可以使用状态机。
使用QTimer,您可以检查lsusb是否找到了打印机。 如果找到,则更改为检测到,打开弹出窗口并更改为活动状态。 在状态激活状态下,您可以检查是否仍然可以找到打印机。如果没有,你会改回状态没有打印机。