设置两个带有 QStyledItemDelegate 的验证器后,QtableView 就会崩溃

2023-12-01

基于这个答案Question我更进一步,基于 QStyledItemDelegate 创建了两个单独的验证器,一个用于整数,一个用于双精度。

如果每个验证器是唯一的一组,则它可以完美工作。一旦我尝试设置两个验证器(每个验证器都在其单独的列中),整个应用程序就会崩溃。

import sys
from PyQt5.QtCore import QSize, Qt, pyqtSignal, QObject
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQuery
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QMessageBox,\
    QLineEdit, QWidget, QVBoxLayout, QDataWidgetMapper, QPushButton, QStyledItemDelegate
from PyQt5.QtGui import QIntValidator, QDoubleValidator

class ValidatedIntItemDelegate(QStyledItemDelegate):
    def __init__(self, bottom, top):
        QStyledItemDelegate.__init__(self)
        self.bottom = bottom
        self.top = top
    
    def createEditor(self, widget, option, index):
        editor = QLineEdit(widget)
        validator = QIntValidator(self.bottom, self.top)
        editor.setValidator(validator)
        return editor 

class ValidatedDoubleItemDelegate(QStyledItemDelegate):
    def __init__(self, bottom, top, decimals=0):
        QStyledItemDelegate.__init__(self)
        self.bottom = bottom
        self.top = top
        self.decimals = decimals
    
    def createEditor(self, widget, option, index):
        editor = QLineEdit(widget)
        validator =  QDoubleValidator(self.bottom, self.top, self.decimals)
        editor.setValidator(validator)
        return editor

class SqlModel(QSqlTableModel):
    def __init__(self, parent=None):
        self.db = QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("chinook.sqlite")
        self.db.open()
        super().__init__()
        self.setupTable()
        self.setTable("Track")
        self.setSort(1, Qt.AscendingOrder)
        self.select()
        self.setEditStrategy(QSqlTableModel.OnFieldChange)
    
    def setupTable(self):
        query = QSqlQuery()
        query.exec("DROP TABLE if exists Track;")
        query.exec("create table if not exists Track ("
                "doda Text,"
                "One Text,"
                "Two Text,"
                "Three Text);")
        query.exec("INSERT into Track (doda) Values( '1' );")
        query.exec("INSERT into Track (doda) Values( '2' );")
        query.exec("INSERT into Track (doda) Values( '3' );")

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(QSize(450, 200))
        widget = QWidget()        
        layout = QVBoxLayout()
        widget.setLayout(layout)
        self.setCentralWidget(widget)
        self.table = QTableView()
        layout.addWidget(self.table)
        self.model = SqlModel()
        self.table.setModel( self.model )

        intDelegate = ValidatedIntItemDelegate(1, 99)
        self.table.setItemDelegateForColumn(0, intDelegate)
#         doubleDelegate = ValidatedDoubleItemDelegate(1,99,2)
#         self.table.setItemDelegateForColumn(1, doubleDelegate)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

有人知道如何让两个验证器并行工作吗?


看来这个问题是因为视图不取得委托的所有权而引起的,然后它们被从内存中删除,因为它们是局部变量,导致分段故障。解决方案是通过创建类属性来延长其生命周期:

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

设置两个带有 QStyledItemDelegate 的验证器后,QtableView 就会崩溃 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页

随机推荐

  • 可访问性在模拟器上有效,但在设备上无效

    在我的项目中 我使用 Apple 提供的 Reachability 类 当没有互联网连接时 我会显示一条警报消息 当我在模拟器上测试它时 一切工作正常 但是当我在 iPad 上运行它时 在没有互联网的情况下不会显示警报消息 我在 iOS 5
  • 如何将向量写入FileStorage

    我已经能够使用 FileStorage 成功地将关键点 向量 描述符 Mat 和其他内容写入 yml 文件 但是 在计算一对图像之间的匹配后 我无法将匹配写入文件 我假设这是因为 DMatch 似乎是一个具有距离 trainIdx 等字段的
  • 如何从元素中删除所有属性

    如何删除整个文档中特定元素的所有属性 我正在尝试这样的事情 from bs4 import UnicodeDammit from lxml import html content open source html read document
  • iOS:将图像幻灯片的 setImageInputs 设置为图像数组

    我正在使用来自的图像幻灯片here iconArr UIImage named home min UIImage named category min UIImage named settings min UIImage named con
  • 在数据库的 dplyr 过滤函数中传递 SQL 函数

    我在用着dplyr的自动SQL后端从数据库表中查询子表 例如 my tbl lt tbl my db my table where my table在数据库中看起来像 batch name value batch A 1 1 batch A
  • 使用 Powershell 替换方括号

    如果您有一个文件名 例如 委员会会议纪要 2010 年 10 月 hq doc 如何让 Powershell 替换方括号 以下不起作用 ls filter foreach Process Rename Item NewName Name r
  • 如何在slick中使用事务

    我有这样的插入方法 权重是索引 implicit def run A action DBIOAction A NoStream lt slick dbio Effect Future A db run action def insert n
  • 计算 int 中使用的位数

    如果你有二进制数 10110 我怎样才能让它返回 5 例如 一个数字表示使用了多少位 下面列出了一些类似的例子 101 应返回 3 000000011 应返回 2 11100 应该返回 5 101010101 应返回 9 在Java中如何以
  • IIS 是否可以要求 SSL 客户端证书而不将其映射到 Windows 用户?

    我希望能够将 SSL 客户端证书映射到 ASP NET Identity 用户 我希望 IIS 完成尽可能多的工作 协商客户端证书并可能验证它是否由受信任的 CA 签名 但我不希望 IIS 将证书映射到 Windows 用户 客户端证书传递
  • 在 QtWebEngine 中捕获 JavaScript 事件

    我必须使用 JavaScript 捕获从网页分派的事件 然后将其连接到我的 MainWindow 类中的插槽 接近这个的东西 QWebEngineView view view gt load QUrl https test com conn
  • Google 地图 - 围绕现有标记创建多边形

    我不知道这是否可能 但我使用谷歌地图通过覆盖层上的标记来绘制实体的位置 我希望能够在所有创建的标记周围创建一个多边形或某种其他类型的覆盖对象 突出显示标记的范围 类似于集水区图 在从数据库中检索所有标记并映射范围之前我不会知道 任何人有任何
  • F# 中不同文件的类型和函数之间的循环依赖问题

    我当前的项目使用具有 40 种不同类型 可区分联合 的 AST 并且该 AST 中的几种类型具有循环依赖关系 类型不是很大 因此我将它们放在一个文件中并应用type and 相互依赖类型的构造 现在 我添加函数来对 AST 中的每个元素进行
  • 如何在 Eclipse PAHO Java MQTT 客户端和 Mosquitto 代理之间创建 PSK 连接?

    我正在尝试在 mosquitto mqtt 代理和使用 Eclipse Paho 客户端库的 Java 编写的应用程序之间配置预共享密钥加密连接 我已成功在两者之间建立了连接 不使用加密 而是使用 SSL 其中服务器证书经过身份验证 但没有
  • 没有这样的模块“Sinch”Xcode 9.1 Swift 4

    这个问题可能与这个 重复 Sinch 集成到 swift 项目中 但我正在执行所有这些步骤 但遇到同样的错误 没有这样的模块 Sinch 我遵循以下步骤 请检查并告诉我是否遗漏了任何步骤或需要添加 我已将其添加到我的 podfile 中 吊
  • jQuery 验证:如果填充了另一个输入,则只需要输入

    我在用jQuery 验证插件来验证 配置页面 我有很多输入 如姓名 电话 电子邮件 最后是 更改密码 部分 我有 3 个输入 例如
  • 在 WooCommerce 中设置优惠券描述

    如果用户成为会员的时间足够长 我的网站会动态地向用户提供优惠券 当我生成优惠券时 我想为优惠券分配一个描述 但是 我似乎无法通过使用密钥更新帖子的元数据来分配描述description as the docs建议我应该可以 目前我正在尝试像
  • WordPress 不处理外部 php 文件

    我正在尝试为 WordPress 编写自己的主题 并编写了一个包含所有模态 twitter bootstrap 的文件 这些模态是 html 我将其添加到主题部分 创建了一个 inc 文件夹 并将其命名为 modals php 我通过 ph
  • 在适用于 iPhone 的 OpenGL ES 中请求 DepthBuffer

    我正在 iPhone 上创建 3D OpenGL ES 视图 并希望设置深度缓冲区 以便可以使用它 我正在打电话glEnable GL DEPTH TEST 等等 但因为我还没有设置 z 缓冲区 所以它什么也不做 我正在寻找一个等效的调用g
  • 模板中的 Angular 2 主题标签是什么意思?

    我正在使用 Angular 2 我发现了类似的东西
  • 设置两个带有 QStyledItemDelegate 的验证器后,QtableView 就会崩溃

    基于这个答案Question我更进一步 基于 QStyledItemDelegate 创建了两个单独的验证器 一个用于整数 一个用于双精度 如果每个验证器是唯一的一组 则它可以完美工作 一旦我尝试设置两个验证器 每个验证器都在其单独的列中