【问题标题】:Checking user idle in PyQt by examining mouse clicks on the GUI通过检查 GUI 上的鼠标单击来检查 PyQt 中的用户空闲
【发布时间】:2014-07-18 09:20:47
【问题描述】:

我正在尝试实现一个功能,如果用户有一段时间没有与 GUI 交互 X,我将停止 GUI 的某些功能。

目前我设置了一个时间戳,如果在 X 秒内没有点击任何按钮,GUI 将终止某些功能

button1.triggered.connect(keep_alive)
button2.triggered.connect(keep_alive)
....
buttonN.triggered.connect(keep_alive)

如您所见,这并不是很优雅,并且不会随着按钮的增加而缩放。因此,我目前正在研究另一种方法来监控鼠标点击

mouse = app.mouseButtons()

if mouse != Qtcore.Qt.NoButton:
    #keep_alive

我认为这有点 hacky,但它适用于我设想的功能,但是,我不知道如何将它插入到 QT 的执行循环中。

任何建议将不胜感激

【问题讨论】:

  • 如果有一个计时器触发小部件(按钮等)所在的框架上的启用/禁用行为会更好。这将解决缩放问题。
  • 谢谢,Qt 框架会记录鼠标点击吗?
  • 我认为它是如何工作的;您connect 是框架及其小部件的单击处理程序。当点击事件被触发时,您将事件从小部件传递到框架(我认为通过调用event.Skip(),您需要检查这一点)。
  • 酷,所以我想我会将所有按钮分组在一个处理程序中,并以某种方式将处理程序连接到框架?然后groups_of_button.triggered.connect(keep_alive) ?
  • 我建议您的原始解决方案很好,如果它不能很好地扩展到 N 个按钮,您可能需要重新考虑如何创建这些 N 个按钮(例如,使它们循环,将它们存储在可迭代的数据结构中,以便您可以遍历它们并将它们连接到您的 keepalive 方法等)

标签: python qt user-interface pyqt


【解决方案1】:

您必须通过重新实现mousePressEvent 来拦截鼠标事件。

http://qt-project.org/doc/qt-4.8/qwidget.html#mousePressEvent

为确保它不会影响您的其他功能,您需要将其传播到父窗口小部件。阅读更多详情:https://www.qt.io/blog/2006/05/27/mouse-event-propagation

我将继续在主窗口中实现它,并确保所有鼠标事件都传播到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多