【问题标题】:Locking a PySide (QT) window during query在查询期间锁定 PySide (QT) 窗口
【发布时间】:2013-12-20 07:46:27
【问题描述】:

我有一个带有数千个复选框的 Q.Widget,这些复选框从数据库中获取数据,并在按下保存按钮后将数据发送回它。

单击保存按钮时,由于正在发送到数据库的大量数据,应用程序会“不响应”直到事务终止,这是正常行为,因为 PySide (QT) 会锁定所有内容,直到回调函数结束。 但是,我发现这种行为“不专业”。

我想要做的是锁定所有内容(因此在查询期间不能对复选框的状态进行修改),但应用程序不会进入“无响应”模式。

我曾想过在单独的线程中运行查询并显示仅在查询结束时关闭的 Q.MessageBox(它会自动锁定 Q.Widget),但我想知道是否有任何方法可以锁定Q.Widget 不显示消息框并在窗口的状态栏中显示状态消息,或者作为最后的手段只是锁定 Q.Widget (不需要在状态栏中显示消息)而不需要它进入“无响应”模式。

此外,将所有复选框设置为禁用也是不可接受的选项。

系统配置:

  • Windows 7 64 位
  • Python 3.3(通过 Windows 安装程序安装)
  • PySide 模块 1.2.1(通过 windows 安装程序安装)数据库:
  • PostgresSQL 9.3.1(通过 windows 安装程序(EntrepriseDB)安装)
  • psycopg2 模块(用于与数据库通信)(已安装 通过 Windows 安装程序)
  • Python 编辑器:PyCharm Community Edition 3.0.2(通过 windows 安装程序安装)

【问题讨论】:

  • 您的要求似乎矛盾。 “未响应”和“锁定”有什么区别?在单独的线程中运行查询以及用消息框锁定 UI 有什么意义(后者似乎违背了前者的目的)?
  • 不同之处在于我想让窗口锁定而不让它变成“全白”并且没有 Windows 在窗口标题处显示“无响应”并告诉用户程序停止响应并且如果他应该等待或退出。这就是为什么我想在一个单独的线程中运行代码,这样窗口就不会“停止响应”,我可以通过其他方式自己阻止它,比如 QMessageMox 或建议的 QProgressDialog 或隐藏内容.. .

标签: python postgresql locking pyside psycopg2


【解决方案1】:

取决于完成交易所需的时间。

但是按照您描述的方式,我会选择 QProgressDialog - 这将为用户提供最佳体验,如果您正确设置其模式,您也会锁定 UI

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多