QTableWidget-自动公式驱动单元格

2023-12-11

是否可以使一个单元格成为公式驱动单元格并使其自动更新?与Excel类似。

例如,我希望用户填写两个单元格,然后当用户填充两个单元格时,第三个单元格将自动划分。我希望它不连接到按钮。

QTable 截图

QTableWidget 的代码:

self.tableWidget = {}
for i in range(int(self.numberLine.text())):
    self.tableWidget[i] = QTableWidget()
    self.tableWidget[i].setRowCount(5)
    self.tableWidget[i].setColumnCount(3)
    self.tableWidget[i].setHorizontalHeaderLabels(['OEM (Case {})'.format(i+1), 'ZVI (Case {})'.format (i+1), 'Improvement % '])
    self.tableWidget[i].setVerticalHeaderLabels(['Flow (MMSCFD)', 'HP', 'Specific Power (HP/MMSCFD)', 'Discharge Temp (F)', ''])
    self.tableWidget[i].setFixedSize(QtCore.QSize(480, 180))
    self.gridLayout_14.addWidget(self.tableWidget[i])

一个优雅的解决方案是创建一个继承自的自定义类QTableWidget,您连接的地方itemChanged信号,每次单元格更改值时都会发出此信号(这将返回更改的项目,但仅使用它来验证默认列是否已更改)。

除了不存在用户将不同值设置为浮动的问题之外,我们还将使用 QDoubleValidator,为此我们创建一个自定义 QItemDelegate。

class FloatDelegate(QItemDelegate):
    def __init__(self, _from, _to, _n_decimals, parent=None):
        QItemDelegate.__init__(self, parent=parent)
        self._from = _from
        self._to = _to
        self._n_decimals = _n_decimals

    def createEditor(self, parent, option, index):
        lineEdit = QLineEdit(parent)
        _n_decimals = 2
        validator = QDoubleValidator(self._from, self._to, self._n_decimals, lineEdit)
        lineEdit.setValidator(validator)
        return lineEdit


class CustomTableWidget(QTableWidget):
    _from = 0
    _to = 10**5
    _n_decimals = 2
    def __init__(self, i,  parent=None):
        QTableWidget.__init__(self, 5, 3, parent=parent)
        self.setItemDelegate(FloatDelegate(self._from, self._to, self._n_decimals, self))
        self.setHorizontalHeaderLabels(['OEM (Case {})'.format(i+1), 'ZVI (Case {})'.format (i+1), 'Improvement % '])
        self.setVerticalHeaderLabels(['Flow (MMSCFD)', 'HP', 'Specific Power (HP/MMSCFD)', 'Discharge Temp (F)', ''])
        self.setFixedSize(QSize(480, 180))
        self.itemChanged.connect(self.onItemChanged)

    def onItemChanged(self, item):
        # items (2, 0) = (1, 0) / (0, 0)
        if item.column() == 0 and (item.row() == 0 or item.row()==1):
            num = self.item(1, 0)
            den = self.item(0, 0)
            if num and den:
                resp = float(num.data(Qt.DisplayRole))/float(den.data(Qt.DisplayRole))
                rest_string = str(round(resp, self._n_decimals))
                it = QTableWidgetItem(rest_string, QTableWidgetItem.Type)
                self.setItem(2, 0, it)

Example:

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.setLayout(QGridLayout())
        for i in range(2):
            self.layout().addWidget(CustomTableWidget(i))

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Widget()
    window.show()
    sys.exit(app.exec_())

在你的情况下:

self.tableWidget = {}
for i in range(int(self.numberLine.text())):
    self.tableWidget[i] = CustomTableWidget(i)
    self.gridLayout_14.addWidget(self.tableWidget[i])

除了使用验证器之外,我们还可以选择将 QLineEdit 更改为 QDoubleSpinBox。

def createEditor(self, parent, option, index):
    w = QDoubleSpinBox(parent)
    _n_decimals = 2
    w.setMinimum(self._from)
    w.setMaximum(self._to)
    w.setDecimals(self._n_decimals)
    return w
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTableWidget-自动公式驱动单元格 的相关文章

  • for 循环如何评估其参数

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

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • PyMC3-自定义 theano Op 进行数值积分

    我使用 PyMC3 进行参数估计 使用必须定义的特定似然函数 我用谷歌搜索了一下 发现我应该使用densitydist实现用户定义的似然函数的方法 但它不起作用 如何在 PyMC3 中合并用户定义的似然函数并找出最大 aposteriori
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 在 Sphinx 中,有没有办法在声明参数的同时记录参数?

    我更喜欢在声明参数的同一行记录每个参数 根据需要 以便应用D R Y http en wikipedia org wiki Don t repeat yourself 如果我有这样的代码 def foo flab nickers a ser
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • 如何将回溯/sys.exc_info() 值保存在变量中?

    我想将错误名称和回溯详细信息保存到变量中 这是我的尝试 import sys try try print x except Exception ex raise NameError except Exception er print 0 s
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 使用 urllib 编码时保持 url 参数有序

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

随机推荐

  • extJS:读取嵌套的 JSON

    我有一个来自 ldap search 调用的漂亮嵌套 JSON 我想使用这些信息来填充 ExtJS ComboBox 但我在读者方面遇到了一些麻烦 显然 我无法在组合框中读取我需要的信息 即人员的邮件地址 uid 和 cn 我认为整个问题都
  • Tensorflow 中的 Triplet、Siamese 和 Softmax

    我想比较以下类型的 CNN 对于两个不同的大型图像数据集的性能 目标是测量两个图像之间的相似度 这两个图像在训练期间都没有见过 我可以使用 2 个 GPU 和 16 个 CPU 核心 Triplet CNN 输入 三张图像 标签 编码到位
  • 如何使用 JavaScript 获取本地 IP 地址? [复制]

    这个问题在这里已经有答案了 我想获取客户端系统的本地IP地址 我如何使用 JavaScript 来实现这一点 我认为如果没有一些服务器交互就无法做到这一点 最简单的方法是向服务器端片段发出 AJAX 请求 在 PHP 中 该片段如下所示
  • 将参数传递给上传器/从上传器内部访问模型的属性/让用户选择缩略图大小

    我想将图像裁剪为用户从列表中选择的尺寸 例如 100x100px 200x200px 我如何将该属性传递给上传者或从上传者中获取模型的属性 从上传器内部访问模型的属性如下不起作用 version thumb do thumbnail siz
  • AccessDeniedHandler 重定向到登录页面

    当 在 Spring Security MVC 中 对页面的访问被拒绝时 由于用户没有足够的权限 尽管他已通过身份验证 我需要通过显示登录页面 而不是标准行为 提供以另一个用户身份登录显示 403 访问被拒绝页面 我可以写一个AccessD
  • 如何将 f-string 与变量一起使用,而不是与字符串文字一起使用?

    我想将 f string 与我的字符串变量一起使用 而不是与用字符串文字定义的字符串一起使用 这是我的代码 name deep mahesh nirbhay user input r certi element this string I
  • 从 LAN 上的任何计算机访问 Apache VirtualHost?

    我有 wamp 设置 其中有很多网站设置为 httpd conf 中的虚拟主机
  • MKCircle 没有更新半径,但它正在平移

    我必须将 MKCicle 绘制到 MKMapView 中 然后 当用户通过滑块更改半径时 我必须重新绘制它 我删除它并重新创建它 将其重新添加到地图中 但我并没有按照我的预期进行操作 而是看到 MKCircle 在地图上平移 并保持相同的大
  • 如何使用 pygit2 进行 git 合并

    我尝试将分支合并到主分支中 repo pygit2 Repository path to repo branch repo lookup branch upstream branch pygit2 GIT BRANCH REMOTE oid
  • 如何使用 JSoup 通过表单提交文本

    我想使用 JSoup 向此表单提交一些文本 我该怎么做呢
  • VBA 跟踪文件使用情况

    我目前有一个生成客户报表的 Excel 文件 我需要跟踪谁运行了他们的报表 目前 每当生成语句时 我都会有一个宏向我发送一封包含其用户名的电子邮件 然而 在瘦客户端系统上运行的人们会收到提示 一个程序正在尝试代表您发送电子邮件 有什么方法可
  • 将响应转发到不同的 URL 时,在 API 管理策略表达式中将响应正文从 XML 转换为 Json

    将响应转发到不同的 URL 时 如何将响应正文从 XML 更改为 Json 我专门将响应转发到 Azure 服务总线 我尝试了许多不同的方法将 XML 序列化为 json 但没有成功 因为策略表达式中不允许使用某些 JsonConvert
  • 在本地化系统上强制以英语输出 PowerShell 错误

    我需要在各种操作系统上运行一些 PowerShell 脚本 其中大多数都是英文版本 但是 有些是本地化的 例如德语 法语 西班牙语等 问题是本地系统管理员现在大多不使用 PowerShell 并且在脚本失败并向他们抛出错误的情况下 而不是阅
  • Conda Build - 创建 Conda 包因平台 win-64 的依赖项而失败

    从本地目录构建我的第一个 conda 包 遵循 CONDA 网站的说明 https conda io docs user guide tasks build packages recipe html 我收到以下错误 conda build
  • SonarQube 分析未显示代码覆盖率

    我有一个 Jenkins 项目来对我的 NodeJS 项目进行 SonarQube 分析 我添加了istanbul作为对我的项目的依赖package json 在 Jenkins 构建配置中 首先我运行一个 shell 脚本 cd proj
  • 最佳适应调度算法

    有多个活动 每个活动都有多个会议时间 我需要找到一种会议时间安排 以便每个日程表仅包含任何给定事件一次 使用每个事件的多个会议时间之一 我可以使用暴力 但这很少是最好的解决方案 我更喜欢任何可以阅读此内容的链接 甚至只是一个我可以谷歌搜索的
  • 当我使用添加函数时断言失败

    在一个表中 我有 3 个索引 每个索引调用一个函数 在每个函数中 都有一个添加按钮 用于将数据添加到 CoreData 中 前 2 个有效 但是当我按第三个索引并按 Add 时 会出现此错误 2011 07 19 16 57 11 079
  • Powershell 转义包含密码的变量

    因此 我使用一个包含密码的变量 最近发现某些密码包含特殊字符 我无法控制密码是什么 所以我必须处理我收到的任何内容 我知道后面的勾号 字符是用来转义字符的 这篇文章的全部原因是我发现密码是文本文件 并将找到的密码替换为 xxxxxxxxx
  • 在 Android 中向 gridview 添加页眉和页脚

    我正在尝试在我的 Android 应用程序中创建具有以下功能的用户个人资料页面 标题 gridview 显示该用户的一堆照片 页脚 当应用程序在网格视图中下载更多照片时的下载图标 header需要与gridview一起移动 换句话说 个人资
  • QTableWidget-自动公式驱动单元格

    是否可以使一个单元格成为公式驱动单元格并使其自动更新 与Excel类似 例如 我希望用户填写两个单元格 然后当用户填充两个单元格时 第三个单元格将自动划分 我希望它不连接到按钮 QTable 截图 QTableWidget 的代码 self