创建一个事件,检测布尔值是否变为真以显示消息
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 是否找到打印机。
如果找到,则更改为检测到,打开弹出窗口并更改为活动状态。
在活动状态下,您会定期检查是否仍然可以找到打印机。如果不是,则更改回无打印机状态。
我有一个 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 是否找到打印机。 如果找到,则更改为检测到,打开弹出窗口并更改为活动状态。 在活动状态下,您会定期检查是否仍然可以找到打印机。如果不是,则更改回无打印机状态。