相关疑难解决方法(0)

将范围滑动器小部件移植到PyQt5

我目前需要一个范围滑块(可以在其中设置最小值和最大值的滑块)。我发现了两个相关的问题:Qt中的Range滑块(QSlider中的两个句柄)以及为什么RangeSlider在QtQuick中可用,而不是作为标准Widget提供,但它们都不是用python3编写的,而且我对C ++不太熟悉。

我发现了这个完美的github工具https://github.com/rsgalloway/qrangeslider,但不幸的是它是为PyQt4编写的,而我正在使用PyQt5。

我打算用PyQt5绑定重新格式化这个github源,但是在这样做之前,我想知道是否有人做过,这样我可以节省时间?或者,如果有人有不同的解决方案,我欢迎您提出建议。

python qt pyqt slider pyqt5

3
推荐指数
2
解决办法
2431
查看次数

在运行时替换 QWidget 对象

在我的应用程序中,我必须用自定义的 QLineEdit 替换所有 QLineEdit 元素。为此,有不同的解决方案:

  1. 修改从 pyuic4 生成的 py 文件,并将所有 QLineEdit 对象替换为我的一个 LineEdit。这个解决方案并不是最好的,因为每次运行 pyuic4 时,我都会丢失对生成的输出文件所做的修改。
  2. 编写一个新类,在我的窗口或对话框中递归搜索 QLineEdit 小部件类型,并将其替换为我的一个 LineEdit。这个解决方案要好得多。它允许我对其他对象执行相同的操作或根据需要扩展它,而无需关心对话框或窗口。

到目前为止,我可以编写一个模块(WidgetReplacer),它递归地搜索 QGridLayout 项目并搜索是否有 QLineEdit 子项。如果是的话,那就换成我的吧。

问题是,当我尝试访问我的 LineEdit 对象之一时,出现以下错误:

RuntimeError: wrapped C/C++ object of type QLineEdit has been deleted
Run Code Online (Sandbox Code Playgroud)

如果我查看输出,我会注意到修改后的 QLineEdit 对象具有旧的 id:

old qt_obj <PyQt4.QtGui.QLineEdit object at 0x0543C930>
Replaced txt_line_1 with LineEdit
new qt_obj <LineEdit.LineEdit object at 0x0545B4B0>
----------------------------------
...
----------------------------------
<PyQt4.QtGui.QLineEdit object at 0x0543C930>
Run Code Online (Sandbox Code Playgroud)

问题

为什么会出现这种情况呢?如何在运行时替换 QWidgets?


更新

这里有一些关于对象包装的其他细节:在模块 WidgetReplace 中,如果我转储 QEditLine 和 LineEdit 对象,我会得到:

<PyQt4.QtGui.QLineEdit object at 0x05378618>
    Reference …
Run Code Online (Sandbox Code Playgroud)

python pyqt qwidget pyqt4 qt-designer

1
推荐指数
1
解决办法
3579
查看次数

标签 统计

pyqt ×2

python ×2

pyqt4 ×1

pyqt5 ×1

qt ×1

qt-designer ×1

qwidget ×1

slider ×1