PyQT 列表视图不响应数据更改信号

2024-04-08

我一直在关注一些教程并尝试设置列表模型。我的主窗口有两个访问同一模型的列表视图。当我更新一个列表中的一项时,另一个列表不会自行更新,直到它获得焦点(我单击它)。所以看起来 dataChanged 信号没有被发出,但我无法弄清楚我的代码与我所基于的任何示例有何不同。

main.py

class Main(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.ui = uic.loadUi("mainwindow.ui", self)

        # Test model and listviews
        data = [10,20,30,40,50]
        myModel = model.MyListModel(data)
        self.ui.listView.setModel(myModel)
        self.ui.listView_2.setModel(myModel)

model.py

class MyListModel(QtCore.QAbstractListModel):
    def __init__(self, data=[], parent=None):
        super(MyListModel, self).__init__(parent)
        self.__data = data

    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.__data)

    def data(self, index, role=QtCore.Qt.DisplayRole):
        row = index.row()
        if role in (QtCore.Qt.DisplayRole, QtCore.Qt.EditRole):
            return str(self.__data[row])

        if role == QtCore.Qt.ToolTipRole:
            return 'Item at {0}'.format(row)

    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role == QtCore.Qt.EditRole:
            self.__data[index.row()] = value
            self.dataChanged.emit(index, index)
            return True
        return False

谁能看出这里出了什么问题吗?仅供参考,我正在使用 PyQT5.2.1 和 Python 3.3。


问题出在签名上dataChanged信号。在 Qt4 中它看起来像这样:

    dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight)

但在 Qt5 中,它看起来像这样:

    dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight,
                const QVector<int> & roles = QVector<int>())

当我使用 PyQt-5.1.1 尝试您的示例代码时,在尝试在没有第三个参数的情况下发出信号时出现错误。严格来说,这是不正确的行为,因为第三个参数有默认值。所以这也许就是行为改变的原因。

但似乎您现在必须显式发出一个空列表作为第三个参数dataChanged为了让 PyQt5 正常工作:

    self.dataChanged.emit(index, index, [])

或者,当然,发出实际已更改的角色列表:

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

PyQT 列表视图不响应数据更改信号 的相关文章

  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • 如何获得没有周末的 DateTime.DaysInMonth ?

    如何在 C 中获取一个月中没有星期五和星期六的天数 强制 LINQ 解决方案 int days Enumerable Range 1 DateTime DaysInMonth year month Select day gt new Dat
  • 如何不在uinavigationcontroller中调用viewdidload?

    我正在寻找针对我的情况的解决方案 我的应用程序如下 VC1 上有一个文本字段和按钮 用户键入名称 然后单击一个按钮 该按钮打开VC2 用户在 VC2 中提供附加信息 然后按 保存 我使用 segue 返回 VC1 并将这些附加信息作为字符串
  • 如何将 Istanbul Code Coverage 与转译的 Typescript 结合使用?

    我整个早上都在阅读有关此问题的文章 试图正确设置我的环境 但由于某种原因我不明白 我的设置 app source mixed js and ts scripts copied source js typescripts js transpi
  • 为什么我的 Azure Function 功能密钥不断重新生成?

    我有六种不同的 Azure 函数 每天会被调用数百次 不过 其中一个与其他任何一个实际上没有什么不同 开发了一项新的 功能 每隔几天 它就会更改功能键 该功能密钥用于对功能进行身份验证 因此每当它发生变化时就会中断我们的流程 原始密钥 以及
  • 如何使用 C# 从 FTP 服务器获取一系列文件

    我陷入了这样一个境地 我将通配符参数与 FtpWebRequest 对象一起使用 很糟糕 FtpWebRequest reqFTP FtpWebRequest FtpWebRequest Create new Uri ftp ftpServ
  • 方程解析库 C++ [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何进行 git rebase 并保留提交时间戳?

    我想进行变基以从我的历史记录中删除某个提交 我知道该怎么做 但是 如果我这样做 提交时间戳将设置为我完成变基的那一刻 我希望提交保留时间戳 我在这里看到了最后一个答案 https stackoverflow com a 19522951 3
  • 在 vega-lite 中实现自定义点击处理程序的正确方法是什么

    我似乎无法通过阅读文档来弄清楚这一点 有没有办法实现onClick我的任何标记的事件处理程序 由于 Vega Lite 尚不支持信号 您可以修补生成的 Vega 您可以将信号添加到已编译的 Vega 规范中 然后通过 Vega 视图 API
  • Logback:如何将日志目录从“tomcat/bin”更改为与应用程序相关的?

    我想用slf4j with logback用于记录 您可以在下面看到我的 logback xml
  • Android SmsRetrieverClient 的短信验证不解析消息

    尝试按照此处的步骤实现短信自动读取以进行验证 https developers google com identity sms retriever request https developers google com identity s
  • 如何在 Spring Data REST 项目中使用 DTO?

    Spring Data REST 自动仅公开域对象 但大多数情况下我们必须处理数据传输对象 那么如何以SDR方式做到这一点呢 一种如何合作的方法DTO https en wikipedia org wiki Data transfer ob
  • 如何在 Visual Studio Code 中获取 Unity 函数名称的智能感知?

    我正在关注有关 Unity 的教程 我发现讲师在编写方法名称时具有智能感知功能 然而 我只有类和变量的智能感知 我的意思是像 Rigidbody 这样的 Unity 类和我自己的变量 我还读过 自动补全在 Visual Studio 中不起
  • Android apk 构建的条件资源包含/排除

    我不断回到这个问题 因为似乎没有一个干净的解决方案 有没有人有一个好的策略来从 Android 子项目中排除资源 我有两种情况 1 基础库项目具有 en es 等本地化文件 子项目1使用所有本地化 一切都很好 子项目 2 仅本地化为英语 但
  • Bookdown:如何更改章节标题的大小?

    我正在使用 bookdown 为研讨会生成幻灯片 我使用菜单中的 大 字母选项来显示幻灯片 但是章节标题字体太大 我在哪里 如何修改那个 Thanks Paul 你可以用 css 来控制它yihui https stackoverflow
  • Keycloak Java 管理客户端在触发验证电子邮件时返回 400 错误

    我在 Spring Boot 2 2 上使用 keycloak 服务器版本 8 0 1 和 keycloak java admin 客户端版本 8 0 1 使用 webflux 和 netty 而不是 tomcat 如果此类信息有帮助的话
  • Python - “ascii”编解码器无法解码字节

    我正在使用 Python 2 6 和 Jinja2 创建 HTML 报告 我为模板提供了许多结果 模板循环遍历它们并创建 HTML 表 当调用 template render 时 我突然开始收到此错误 td result result st
  • sorl-缩略图不起作用

    我已经尝试了几个小时来让 sorl thumbnail 工作 但它就是行不通 困难的部分是它没有显示错误 所以我不知道出了什么问题 我按照说明安装了它 我的完整代码可以在这里找到 https github com samos123 Samo
  • 在同一个表上触发 INSERT 和 UPDATE

    众所周知 实体框架无法保存地理数据 所以我的想法是 在我的模型中将经度和纬度指定为十进制 执行用于创建表的 SQL 脚本后 我将启动另一个脚本来添加地理列 然后我想通过触发器在每次插入或更新 经度和纬度 时更新此列 下面的触发器是好的还是坏
  • 在新机器上部署.net应用程序并得到“系统无法执行指定的程序”

    我有一个启动 Excel 的 net 控制台应用程序 我让它在我的开发环境中运行 但我无法让它在我的生产环境中运行 当我尝试运行它时 收到以下错误 系统无法执行指定的程序 我已经在我的生产服务器上安装了 net 2 0 sp2 有任何想法吗
  • PyQT 列表视图不响应数据更改信号

    我一直在关注一些教程并尝试设置列表模型 我的主窗口有两个访问同一模型的列表视图 当我更新一个列表中的一项时 另一个列表不会自行更新 直到它获得焦点 我单击它 所以看起来 dataChanged 信号没有被发出 但我无法弄清楚我的代码与我所基