尝试复制 pyside 对象时出现问题

2024-01-07

我在使用时遇到了一个相当令人沮丧的问题pyside我欢迎任何建议。

首先,一些背景

我使用以下命令创建了一个简单的 GUIQt设计师我已经用过pyside-uic.exe到我的.ui文件以生成相关的Python file.

我在用Python 3.3 and pyside 1.2.1 with Qt设计师4 (Qt 4.8.5).

我使用以下代码来启动我的 GUI:

class my_dialog(QMainWindow, my_gui.Ui_main_window):
    def __init__(self, parent=None):
        super(my_dialog, self).__init__(parent)
        self.setupUi(self)

if ("__main__" == name):
    app = QApplication(sys.argv)
    main_dialog = my_dialog()

    # (1)

    main_dialog.show()
    sys.exit(app.exec_())

我想实现什么

我的 GUI 有几个选项卡。选项卡的数量不是预先确定的,而是在运行时评估的。因此,我决定在其中创建一个选项卡Qt设计师,用作模板。

第一次需要添加选项卡时,我修改了此模板,如果我需要任何其他选项卡,我计划复制该选项卡进而修改该副本适当地。

我遇到的问题

我的问题是我似乎找不到复制选项卡小部件的方法。经过一番研究后,我认为copy http://docs.python.org/3.3/library/copy.html模块(或pickle http://docs.python.org/3.3/library/pickle.html模块,请参阅编辑)可能会解决问题(以下代码已插入(1)):

new_tab = copy.deepcopy(main_dialog.my_tab)
main_dialog.my_tabs.addTab(new_tab, "")

但这引发了以下错误:

    main_dialog.my_tabs.addTab(new_tab, "")

RuntimeError:内部 C++ 对象 (Pyside.QtGui.QWidget) 已删除

我自己能找到什么

我在 SO 和其他网站上看到,使用时可能会出现问题pyside,因为没有引用它们而被收集的对象Python.

然而,事实仍然是,即使我将此代码移至非常setupUi()方法中的.py生成的文件pyside,我仍然得到完全相同的错误。

还值得注意的是,我能够访问my_tab对象可以轻松修改其内容。

我可以在我的代码中从头开始创建另一个选项卡main_dialog.my_tabs.addTab(new_tab, "")在这种情况下工作得很好。

经过一些实验,我意识到问题可能出现在my_tab目的。事实上,复制我刚刚创建的选项卡对象时,我可以看到尝试将副本添加到 GUI 选项卡也失败了,并且出现相同的错误。

看起来复制失败了,或者由于某种原因该对象被立即删除。无论如何,这就是我的推断......

我的问题

考虑到这一切,我想找到一种方法来成功复制对象,找到另一种方法来使用现有的pyside对象作为其他类似对象的模板。

I could当然,从生成的文件中取出选项卡的代码并编写我自己的代码addTab()方法。然而,我预计会从现有的.ui文件并避免对 GUI 元素进行硬编码。

EDIT:

使用时pickle:

new_tab = pickle.loads(pickle.dumps(main_dialog.my_tab, -1))

我收到以下错误:

    new_tab = pickle.loads(pickle.dumps(main_dialog.my_tab, -1))

_pickle.PicklingError:无法pickle :属性查找Pyside.QtCore.SignalInstance失败。


为要复制的小部件创建单独的 ui 文件的建议似乎是一个合理的解决方案。尽管使用 pyside-uic 为小部件生成单独的 gui 模块似乎与使用QUiLoader(事实上​​,这会稍微更有效率)。

至于为什么使用例如克隆小部件的问题copy.deepcopy不起作用:这是因为它只会复制 python 包装器,而不是底层的 C++ 对象。可以在以下位置找到更全面的解释这个答案 https://stackoverflow.com/a/22726804/984421.

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

尝试复制 pyside 对象时出现问题 的相关文章

  • 手动将行添加到 StreamingHttpResponse (Django)

    我正在使用 Django 的 StreamingHttpResponse 动态传输大型 CSV 文件 根据the docs https docs djangoproject com en 1 11 ref request response
  • 为什么 scipy.signal.correlate2d 在此示例中无法工作?

    我试图对两个图像进行交叉关联 从而通过找到最大相关值来将模板图像定位在第一张图像上 我画了一个带有一些随机形状的图像 第一张图像 并剪出了其中一个形状 模板 现在 当我使用 scipy 的 correlate2d 并在具有最大值的相关性中定
  • 使用正则表达式在 Pandas Series 的各个单元格内分隔逗号分隔的值

    我有一个来自数据库的 csv 文件 我已将其转换为我正在尝试清理的 Pandas DataFrame 问题之一是多个值已输入到需要拆分的单个单元格中 复杂的因素是有一些字符串注释 也带有逗号 需要保持完整 下面的示例以系列形式说明了该问题
  • 命令错误,退出状态 1: python setup.py Egg_info 检查日志以获取完整的命令输出 - 通过 pip 安装 auto-py-to-exe 时

    我正在尝试在与我通常通过 pip 使用不同的 Windows 设备上下载 auto py to exe 但是 当运行时 我收到错误 抱歉 它太长了 ERROR Command errored out with exit status 1 c
  • 查找框和裁剪图像的角点

    Hey Guys I am working with numpy and opencv and want to get a image cropped by the contours of it Here is one example wh
  • 持久子进程.Popen 会话

    我正在尝试运行一个命令 然后在同一环境中运行另一个命令 比如说 如果我在第一个命令中设置环境变量 我希望它可用于第二个命令 我试过这个 import subprocess process subprocess Popen echo test
  • pandas.algos._return_false 在 CentOS 上使用 dill.dump_session 导致 PicklingError

    我有一个代码框架 其中涉及使用 dill 转储会话 这曾经工作得很好 直到我开始使用 pandas 以下代码在 CentOS 6 5 版本上引发 PicklingError import pandas import dill dill du
  • Python pandas - 根据集体 NaN 计数删除组

    我有一个基于不同气象站的多个变量 温度 压力等 的数据集 stationID Time Temperature Pressure 123 1 30 1010 5 123 2 31 1009 0 202 1 24 NaN 202 2 24 3
  • 多处理冻结计算机

    我通过使用多处理提高了执行时间 但我不确定 PC 的行为是否正确 它会冻结系统 直到所有进程完成 我使用的是 Windows 7 和 Python 2 7 也许我做错了 这就是我所做的 def do big calculation sub
  • 在Python中使用argparse解析整个JSON

    我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json 问题是当它遇到儿子内部的不同元素 例如 和 时 它会突然停止 这是测试代码 parse py import argparse parser argparse Argu
  • 从 pexpect 中提取 stderr

    我的问题很简单 我可以吗 expect 使用 pexpect 查看 stderr 上的某些输出 它似乎pexpect spawn 只能用于期望 stdout 上的输出 乌托邦的例子 import pexpect child pexpect
  • 为 scipy 安装 BLAS 和 LAPACK 最简单的方法是什么?

    我想运行一个别人已经准备好的程序 其中包括 scipy 我尝试安装 scipy pip install scipy 但这给了我一个很长的错误 我知道 Anaconda 和 Canopy 有很多方法 但我认为这些方法还有很长的路要走 我想走近
  • 在django中使用pre_save时取消保存模型

    我有一个模型 class A models Model number models IntegerField 但是当我调用 A save 时 我想确保该数字是素数 或其他条件 否则应该取消保存指令 那么如何取消pre save信号接收器中的
  • 使用python docx合并word文档

    我有几个单词文件 每个文件都有特定的内容 我想要一个片段来展示或帮助我弄清楚如何在使用 Python 时将单词文件合并到一个文件中docx图书馆 例如 在 pywin32 库中我执行了以下操作 rng self doc Range 0 0
  • 在窗口中定位画布 - Tkinter/python

    有没有办法将画布放置在窗口中并在其周围放置一个框架 我只找到了如何在画布内放置对象 您可以创建一个框架 然后将您的小部件放入其中 f tk Frame c1 tk Canvas f c2 tk Canvas f c1 pack side l
  • 多处理和美好价值

    有谁知道在多处理中创建进程或池时设置进程或池的良好值的简单方法 os nice increment Add increment to the process s niceness Return the new niceness Availa
  • Discord.py 提供角色的反应机器人

    我如何制作一个机器人 当人们对特定事物做出反应时 它可以为他们分配角色 到目前为止我有这个但它不起作用 client event async def on ready channel client get channel 513546504
  • 使用 Fabric 检查路径是否存在

    我正在运行此代码来检查此目录是否存在于远程计算机上 但此代码正在检查本地计算机上的目录 如何验证远程计算机上的目录 rom fabric api import run sudo env import os env hosts remote
  • 为什么“导入*”不好?

    建议不要使用import 在Python中 谁能分享一下原因 以便我下次可以避免这样做 因为它将很多东西放入您的名称空间中 可能会隐藏以前导入的其他对象 而您不会知道它 因为您不确切知道导入了什么 并且无法轻松找到某个东西是从哪个模块导入的
  • 与 Pandas DataFrame 列表列的比较

    我有一个像这样的数据框 df col1 col2 a 1 2 b 3 4 c 3 9 我想根据匹配的输入数组获取行 因此如果我有数组 1 2 我可以获得 col1 col2 a 1 2 当我尝试使用此公式执行此操作时 它不起作用 df lo

随机推荐

  • 二叉搜索树插入 - 根始终为空

    我有使用递归在二叉搜索树中插入值的 ds 代码 问题是根始终保持为空 执行后 第一个 printf 打印 10 但第二个 printf 在 insertRec 10 之后 不会打印任何内容 因为 root 为 null include
  • 查找数组中两个不连续的元素,且其总和最小

    Intro 据我所知 这个问题还没有被问到 这是一道面试题 我什至不是专门寻找代码解决方案 任何算法 伪代码都可以工作 问题 给定一个整数数组int A和它的大小N 找到 2非后续的 在数组中不能相邻 具有最小总和的元素 此外 答案不得包含
  • java swing中如何设置按钮的背景图片

    我想改变 Swing 中 JButton 的背景图像 方法 Button setIcon 只设置图标不设置背景 有没有easy怎么办 您仍然可以使用setIcon但您需要设置对齐方式以使文本出现在图像上 button setHorizont
  • 如何定位并恢复已删除的文件

    在过去的某个阶段 我有一个 foo txt 它受 Mercurial 源代码控制 不过现在它已经被删除了 当我不知道删除文件的最后 Mercurial 版本时 如何恢复该文件 如果您知道文件的确切路径 您可以执行以下操作 hg log l
  • 如何更改 IntelliJ IDEA 中的语言?

    这似乎是个愚蠢的问题 但我在设置中找不到它 怎么更改语言 你指的是IDE语言吗 似乎你不能 http devnet jetbrains net message 5307040 5307040 除非你自己本地化 http www jetbra
  • 在 Visual Studio Code 中,如何获取在源代码管理窗格中执行的所有 git 命令的 git 日志?

    在 vscode 源代码控制窗格中 我想获取正在运行的会话的任何应用的 git 命令的命令日志 包括所有鼠标单击操作 例如 在 初始化存储库 之前 在 初始化存储库 之后 应该记录git init命令 等等 The Git Output可以
  • JSON 结构在 IE7 中不起作用 (JavaScript)

    好吧 我是 JSON 新手 所以如果我的问题有点无知 请原谅我 我已经把头撞在墙上太多了 需要一些专家的建议 我试图得到一个简单的示例 其中 HTML 页面使用 jQuery 的 JSON AJAX 函数来调用示例 PHP 页面 该页面传回
  • gethitRect() ,我做错了,这是如何工作的?

    我不断得到top bottom left right 0 我想我做错了 正确的方法是什么 TIA in onCreate ImageView trash ImageView findViewById R id dropTarget tras
  • 没有线性化点的方法是否总是不可线性化?

    如果你能明确证明一个方法没有线性化点 是否一定意味着该方法不可线性化 另外 作为一个子问题 如何证明一个方法没有线性化点 为了建立在上述答案的基础上 一种方法can被描述为可线性化的 正如 djoker 在书中提到的 http www am
  • 使用 true 和 false 语句在 python 中循环整个程序

    我写了一个程序 但我不知道如何循环它 如有帮助 将不胜感激 这是我需要帮助的程序 有两种类型的循环 不定 while 循环和定 for 循环 如果您想让程序循环特定次数 请使用 for 循环 for count in range 0
  • 如何设置 Eclipse 来编辑 Perl 而无需运行时检查?

    我正在开发一个包含 Java 在客户端 和 Perl 在服务器端 的项目 我真的很想使用 Eclipse 来编辑我的 Perl 脚本 而不是使用另一个编辑器 我尝试过使用史诗插件 http www epic ide org 但是 我无法在本
  • 您可以使用特定类型的类对泛型类进行子类化吗?

    我有一个泛型类 其子类提供特定类型 public abstract class GenericBase
  • 在 AsyncTask 中使用从 LoaderManager 返回的游标

    我有一个光标返回onLoadFinished回调 来自LoaderManager LoaderCallbacks 我想对此游标进行一些 可能成本高昂 后处理 所以 我要发射一个AsyncTask使用这个游标 但是 我遇到间歇性崩溃 但有以下
  • 从 MongoDb 数组的数组中删除元素

    下面是数组联系人的架构 联系人数组有一个字段标签 它是另一个数组 如何从数组 Hashtags 中删除元素 openLove contacts addedDate ISODate 2015 12 02T09 06 09 891Z perso
  • 复制 Bash 数组失败

    在 Bash 脚本中将数组分配给变量似乎相当复杂 a a b c b a echo a 0 echo a 1 echo b 0 echo b 1 leads to a b a 代替 a b a b 为什么 我该如何修复它 如果你想copy将
  • WPF:如何使用组合框文本搜索?

    我是否正确假设组合框中的文本搜索在组合框顶部提供了一个文本输入框 当我输入时该文本输入框会被过滤掉 如果是这样 我不明白为什么它不起作用 我有一个 ComboBox 其 ItemsSource 通过 DataContext 绑定到 List
  • Chrome 扩展程序消息传递不起作用(background.js 到 content.js)

    我束手无策 试图弄清楚为什么我无法在我的 Chrome 扩展程序中传递消息 请记住 上个月我对 javascript 完全陌生 并且我一直在通过在线视频自学 我的编码背景完全是 java 我想要的只是让我的后台脚本能够通知我的内容脚本发生了
  • 检测 FF 插件中的导航

    我正在使用 FF Addon SDK 将 Chrome 扩展移植到 FF 在后台脚本 main js 文件中 我需要使用 FF 等效项 chrome webNavigation onBeforeNavigate addListener an
  • 无法将带有泛型方法的函数接口转换为 lambda 表达式

    无法将具有泛型方法的函数接口转换为 lambda 表达式 以下代码正在运行 它没有 lambda 表达式 即使用匿名类 public interface Pro public
  • 尝试复制 pyside 对象时出现问题

    我在使用时遇到了一个相当令人沮丧的问题pyside我欢迎任何建议 首先 一些背景 我使用以下命令创建了一个简单的 GUIQt设计师我已经用过pyside uic exe到我的 ui文件以生成相关的Python file 我在用Python