线程和 GUI 应用程序之间的 Python 新型信号和插槽

2023-12-14

我是 OOP 和 python 的新手。我正在尝试使用新样式的信号和插槽从 Qthread 向 Qt GUI 主窗口发出信号。

这就是线程。在单击 GUI 中的“运行”按钮后 3 秒后,我将在 GUI 中发出用于更新消息对话框的信号。我不确定继承是否定义正确或者信号是否以正确的方式定义。

class OptimThread (QtCore.QThread):

    signalUpdateMessageDialog = QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QString)")

    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):

        start = time.time()

        self.emit(self.signalUpdateMessageDialog, time.time() - start, 'Initialising...')     

        time.sleep(3)

        self.emit(self.signalUpdateMessageDialog, time.time() - start, 'You waited 3 seconds...')

主类和应用程序部分是这样的(我省略了其他可能不相关的代码)。

class Main(QtGui.QMainWindow, Ui_MainWindow):    

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

    def updateMessageDialog(self, times, dialog):  

        hours = str(datetime.timedelta(seconds=int(times)))

        self.MessageDialog.insertHtml('<tt>' + hours + ':</tt> ' + dialog + '<br>')

        return
    def clickRun(self):


        self.optimThread = OptimThread()

        self.connect(self.optimThread, QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QString)"), self.updateMessageDialog)

        #self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog)

        self.optimThread.start()

if __name__ == '__main__':
    app=QtGui.QApplication(sys.argv)
    window=Main(None)
    app.setActiveWindow(window)
    window.show()
    sys.exit(app.exec_()) # Exit from Python

如果一切都这样写,它就可以了。 然而,如果我想在 Main 中使用新的连接方式:

self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog)

它说:

self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog) AttributeError:“str”对象没有属性“connect”

感谢您的建议(与主题和风格相关),并对没有制作 MWE 表示歉意。


您的示例的结构或多或少是正确的:但是您将旧式信号槽语法与新式混合在一起。

信号定义应如下所示:

class OptimThread(QtCore.QThread):
    signalUpdateMessageDialog = QtCore.pyqtSignal(int, str)

信号应该这样发出:

    self.signalUpdateMessageDialog.emit(
        time.time() - start, 'Initialising...')

这就是信号的连接方式:

    self.optimThread.signalUpdateMessageDialog.connect(
        self.updateMessageDialog)

使用新式语法,永远不需要使用SIGNAL() or SLOT(),并且无需指定 C++ 签名。

有关更多详细信息,请参阅新型信号和时隙支持 in the PyQt4参考.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程和 GUI 应用程序之间的 Python 新型信号和插槽 的相关文章

  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • C++11 非阻塞生产者/消费者

    我有一个 C 11 应用程序 其中有一个生成数据的高优先级线程和一个消耗数据的低优先级线程 在我的例子中 将其写入磁盘 我想确保高优先级生产者线程永远不会被阻塞 即它仅使用无锁算法 使用无锁队列 我可以从生产者线程将数据推送到队列 并从消费
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 如何使用 paramiko 查看(日志)文件传输进度?

    我正在使用 Paramiko 的 SFTPClient 在主机之间传输文件 我希望我的脚本打印文件传输进度 类似于使用 scp 看到的输出 scp my file user host user host password my file 1
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 我如何告诉 QTableWidget 结束编辑单元格?

    我正在显示一个弹出菜单来选择 QTableWidget 中的某些值 最下面的项目是 修改列表 条目 当我选择它时 应自动出现一个新窗口 并且 QComboBox 应消失 并且单元格返回到 Qt DisplayRole 状态 现在 Qt 拥有
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • JSP Servlet 会话 invalidate() 不会使会话为空

    我的 JSP 项目中有三个简单的 Http Servlet 类 LoginServlet Logout Servlet 和 Profile Servlet LoginServlet 通过为会话设置 name 属性来登录用户 LogoutSe
  • Lambda表达式编译方法

    我有几行代码 public void CreateMethod
  • 随机 MapView 强制关闭:NullPointerException com.google.googlenav.map.Tile.getTile

    我真的需要一些帮助 我有一份关于此堆栈跟踪强制关闭的报告 但我找不到任何有关如何防止的信息 也无法复制此类错误 我希望有人能够了解为什么会发生这种情况 com google googlenav map Tile getTile Unknow
  • include、include_once、require 还是 require_once?

    我有 PHP 文件 其中定义了服务器访问变量以及mysql connect and mysql select db 因为这个函数在后端的几乎每个页面中都经常使用 而我正在使用include 这现在对我来说非常有效 你会建议哪种方法或功能 我
  • 不可见元素的延迟加载

    我有一个案例 我有一个gridview listbox 任何类型的项目控件和绑定到控件的项目数量都很大 很容易在 5000 标记左右 其中每个项目都需要具有从各种 Web 服务加载的各种属性 显然 使用 Web 服务来一次性处理这么多元素是
  • 禁用 CURLOPT_SSL_VERIFYPEER (libcurl/openssl) 的安全后果

    我知道从这个线程禁用 CURLOPT SSL VERIFYHOST 时可能发生哪些攻击 我想知道禁用 VERIFYPEER 而不是 VERIFYHOST 时可能发生哪些攻击 使用信用卡付款的风险是否可以接受 我问的原因是因为我的code仅适
  • Pygame 蛇食物生成器

    我目前正在创建一个贪吃蛇游戏 我想创建一个食物生成器 根据我的游戏计时器每 10 秒生成一个苹果 计时器从 60 倒数到 0 游戏结束时 我希望每 10 秒生成一个新苹果 保留旧苹果 即使它还没有被吃掉 我不知道如何解决这个问题 需要一些帮
  • Windows Visual Studio 2008 中的 Unix Makefile

    我已经进行了不错的搜索 但似乎找不到一种方法让 Visual Studio 2008 使用 unix Makefile 甚至无法从 Makefile 创建一些与 MSVC 兼容的等效文件 有人有想法或类似的问题吗 注意 我已经知道使用 Ma
  • 在 macOS Big Sur 上将 Python 3.7 升级到 3.9

    我正在尝试在 macOS Big Sur 上将 Python 3 7 升级到 3 9 我还试图避免丢失在 Python 3 7 上安装的包并在 Python 3 9 上再次重新安装它们 我尝试使用 brew install python3
  • 是否可以仅使用 C# 以编程方式生成 X509 证书?

    我们正在尝试使用 C 和以下代码以编程方式生成 X509 证书 包括私钥 充气城堡图书馆 我们尝试使用一些代码这个样本由 Felix Kollmann 制作但证书的私钥部分返回 null 代码及单元测试如下 using System usi
  • 在 R 中拟合 Log Pearson III 时出现问题

    我想对我拥有的一些数据点执行对数 Pearson III 拟合 然而 每次我尝试这样做时 我都会收到错误消息 我真的不知道该怎么办 也许我应该补充一点 我从几天前才开始使用 R 所以 我不是这方面的专家 重要的代码部分 没有导入内容的部分等
  • 合并两个字典同时共享密钥

    我正在尝试构建一个小程序 给定一个包含姓名和地址的字典和另一个包含姓名和电话号码的字典 输出应该将它们合并 并且不会相互覆盖 最终输出字典应包含姓名 地址 如果可用 和电话 如果可用 这是一个例子 addr George via Wagne
  • 如何复制当前活动的浏览器 URL?

    我正在尝试获取活动浏览器窗口的当前活动浏览器 URL 有任何指针或代码示例吗 Code NSAppleScript script NSAppleScript alloc initWithSource tell application Saf
  • 调试无法检查变量

    while debugging in eclipse the problem is String hashCode line 1489 local variables unavailable thus not able to inspect
  • Android 网络服务 GPS 导航

    如何在应用程序导航中显示以查找方向和搜索任何地方 当我们在浏览器中打开谷歌地图时会发生这种情况 但我希望在应用程序中也有同样的情况 None
  • 获取已安装 COM 对象的 GUID

    我有一个 32 位 COM 对象 我想将其与 64 位 PHP 一起使用 我正在尝试按照这里的教程进行操作 http www gfi com blog 32bit object 64bit environment 但我被困在 找到你的 CO
  • ASP.NET Excel导出编码问题

    我正在 ASP NET 网站上进行一些 Excel 导出 除了编码之外 一切正常 当我在 Excel 中打开它时 它看起来像这样 Eingabe Kosten je Ger t Ger t 特殊情况 Betriebsmittel Heiz
  • Bootstrap:更改移动设备上全角列的顺序

    我有这样的架构 col 1 col 2 它们的宽度都是12块 和我的html div class col xs 12 col md 5 1 div div class col xs 12 col md 7 2 div 是否可以在 xs mo
  • 从 VTCompressionOutputCallback 中引用“self”[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用 VideoToolbox 对来自AVCaptureVideoDataOutput 但我在引用时遇到问题self从内部VTCompressionOutputCallback 我的代码如下 var
  • 线程和 GUI 应用程序之间的 Python 新型信号和插槽

    我是 OOP 和 python 的新手 我正在尝试使用新样式的信号和插槽从 Qthread 向 Qt GUI 主窗口发出信号 这就是线程 在单击 GUI 中的 运行 按钮后 3 秒后 我将在 GUI 中发出用于更新消息对话框的信号 我不确定