在循环中连接 PyQt4 中的槽和信号

2024-02-26

我尝试使用 PyQt4 构建一个计算器,但从按钮连接“clicked()”信号无法按预期工作。 我为 for 循环内的数字创建按钮,然后尝试连接它们。

def __init__(self):
    for i in range(0,10):
        self._numberButtons += [QPushButton(str(i), self)]
        self.connect(self._numberButtons[i], SIGNAL('clicked()'), lambda : self._number(i))

def _number(self, x):
    print(x)

当我单击按钮时,所有按钮都会打印出“9”。 为什么会这样?我该如何解决这个问题?


这就是 Python 中定义作用域、名称查找和闭包的方式。

Python 仅通过赋值和函数参数列表在命名空间中引入新的绑定。i因此实际上并未在名称空间中定义lambda,但是在命名空间中__init__()。名称查找i在 lambda 中最终会出现在命名空间中__init__(), where i最终必然会9。这称为“关闭”。

您可以通过传递来解决这些确实不是很直观(但定义明确)的语义i作为具有默认值的关键字参数。如前所述,参数列表中的名称在本地命名空间中引入了新的绑定,因此i在 - 的里面lambda然后变得独立于i in .__init__():

self._numberButtons[i].clicked.connect(lambda checked, i=i: self._number(i))

UPDATE: clicked has a default checked argument that would override the value of i, so it must be added to the argument list before the keyword value.

一个更具可读性、更少魔力的替代方案是functools.partial:

self._numberButtons[i].clicked.connect(partial(self._number, i))

我在这里使用新型信号和槽语法只是为了方便,旧式语法的工作原理是一样的。

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

在循环中连接 PyQt4 中的槽和信号 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • Spring 利用 Mongo 通过 JPA 实现

    我对 Spring 框架相当陌生 并且在设置我当前正在处理的项目时遇到了一些问题 我需要能够连接到两个不同的数据库 一个是 MongoDB 另一个是 MSSQL 我正在使用 JPA 连接到 MSSQL 我遇到的问题是 当我希望它调用 MSS
  • 是否可以从 ASP.NET 4.0 中的服务器错误页面中删除信息?

    为了更好地向用户隐藏信息 我正在尝试删除版本信息标准 ASP NET 错误屏幕中的部分 自定义错误已启用 但是在某些情况下 如果您设法遇到超出您控制范围的错误 也许是服务器问题 那么您可以联系 YSOD 我尝试更改 web config 以
  • 列表包中 R 代码块的颜色

    我希望在 LaTeX 文档中插入 R 代码块 默认设置为listings包还改变了字体 但没有改变我需要的颜色 虽然我知道我可以使用lstset功能 我不太确定组合起来会好看 因此 任何人都可以分享他们的lstset设置为listings封
  • React Native - 设备后退按钮处理

    我想检查当按下设备后退按钮时是否有多个屏幕在堆栈上 如果是 我想显示上一个屏幕 如果否 我想退出应用程序 我已经检查了一些例子 但那些使用BackAndroid and Navigator 但它们都已被弃用 BackHandler是替代Ba
  • Chrome 中大图像的淡入淡出

    我在大图像中淡入淡出时遇到一些问题 但仅限于 Chrome 这是绝对基本的设置 document ready function var img new Image img hide load function this fadeIn 300
  • GWT:如何抑制超链接,以便它不会更改我的历史标记

    我想让我的超链接像按钮一样工作 仅响应 Click 事件 但是 当您单击它们时 它们会自动更改历史记录令牌 这会弄乱我的应用程序中的历史记录机制 有没有办法抑制超链接的默认行为 以便它不会更改历史标记 我尝试将 targetHistoryT
  • Javascript 数组排序是异步的吗? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 Javascript Array sort 函数是异步的吗 我不这么认为 但是当我运行以下代码时 它似乎确实是 alph
  • vs code 终端每次都会更改为 powershell [重复]

    这个问题在这里已经有答案了 在 Vs code 更新 1 60 0 后 终端打开 powershell 但默认保持不变 git bash 如果我创建新终端 那么它会打开 git bash 当我启动应用程序时 它看起来像 然后我必须创建新的
  • Python初始化

    我有这个代码 def init self a b c d self a a self b b etc 我正在考虑将其替换为 def init self a b c d args locals for key in args self dic
  • ASP .NET MVC5 中的 CORS

    我有一个 MVC 项目 其中有几个想要公开跨域的 JSON 控制器方法 不是整个网站 只是这两种方法 我基本上想要这篇文章中针对 cors 所说的确切内容 http enable cors org server aspnet html ht
  • 过滤 fiddler 仅捕获特定域的请求

    我不确定如何修改 CustomRules js 文件以仅显示特定域的请求 有谁知道如何做到这一点 这很容易做到 在过滤器选项卡上 单击 仅在过滤器包含时显示 然后键入您的域
  • 如何使用 Enthought python (Canopy) 安装 CVXOPT

    在开始之前 让我为这篇文章添加替代标题 如何使用 Intel MKL 编译 CVXOPT 如何更改 CVXOPT 中的 init py 以使用 Intel MKL 进行编译 让我解释一下这个问题 我正在尝试使用 Enthought pyth
  • JUnit4 和 JUnit5 测试未在 IntelliJ 中运行

    我试图在 IntelliJ IDEA 2017 1 5 的同一个项目中使用 JUnit4 和 JUnit5 测试 到目前为止 所有测试都基于 JUnit4 我添加了jupiter platform and vintage对我的 pom xm
  • clang++ 和 O2 的未定义引用

    我正在一个项目上尝试 CLang 3 4 和 libc 但在发布模式下出现奇怪的链接错误 home wichtounet dev eddic src ast Operator cpp 17 error undefined reference
  • 如何调整规范模式来评估对象的组合?

    我知道规范模式描述了如何使用类的层次结构来实现ISpecification
  • Xcode 并排代码比较选项在哪里?

    从 Xcode 13 开始 代码比较默认不再是并排差异 一定还有办法做到这一点 我正在努力寻找选择 点击Code Review 屏幕截图上的蓝色按钮 一个箭头指向左侧 另一个箭头指向右侧 或在View Menu 然后 在第二个图标上 选择S
  • 关闭 Twitter Bootstrap Navbar 过渡动画

    就像http twitter github com bootstrap http twitter github com bootstrap 我现在工作的网站是响应式的 我想删除过渡动画 当我单击折叠的导航栏菜单按钮时 上图是我所问问题的截图
  • 如何使用 IIS 为 Amazon EC2 服务器启用 FTP 被动模式

    我最初在使用 pagelime 时遇到了问题 它要求用户使用被动模式并且不支持主动模式 让主动模式工作起来非常简单 但让被动工作模式需要付出更多的努力 我正在使用带有 IIS 的 Amazon EC2 服务器以及 FTP 站点 以下链接最终
  • 使用Composer的开发/生产切换时如何正确部署?

    Composer 可以选择仅在开发时加载多个依赖项 因此这些工具不会安装在生产环境中 在实时服务器上 理论上 这对于仅在开发中有意义的脚本非常方便 例如测试 假数据工具 调试器等 解决的方法是添加一个额外的require dev使用开发中所
  • 在循环中连接 PyQt4 中的槽和信号

    我尝试使用 PyQt4 构建一个计算器 但从按钮连接 clicked 信号无法按预期工作 我为 for 循环内的数字创建按钮 然后尝试连接它们 def init self for i in range 0 10 self numberBut