python - pyqt中GUI的模型 View 实现错误

标签 python user-interface pyqt qcombobox qstringlistmodel

当我关闭应用程序时,以下示例代码因此错误而崩溃:

QBasicTimer::start: QBasicTimer can only be used with threads started with QThread

这是我的代码:

import sys
from PyQt4 import QtGui ,QtCore

app = QtGui.QApplication(sys.argv)

data=[]
data.append("one")
model=QtGui.QStringListModel(data)

combobox=QtGui.QComboBox()
combobox.show()
combobox.setModel(model)

sys.exit(app.exec_())

我发现这是关于使用模型的,但我不知道如何修复它。

编辑: 操作系统:win 7 64位 pyqt4

最佳答案

程序并没有“崩溃”:它只是在正常关闭过程中打印一条错误消息。

显示该消息的原因是垃圾收集的副作用。当 python 关闭时,对象被删除的顺序可能是不可预测的。这可能会导致 C++ 端的对象以“错误”的顺序被删除,因此 Qt 有时会在发生这种情况时提示。

“修复”示例代码的一种方法是简单地重命名一些 PyQt 对象。例如,如果我将名称 combobox 更改为 combo,错误消息就会消失。这没有什么神秘的 - 它只是改变了对象被删除的顺序。

但解决该问题的另一种更可靠的方法是确保 QStringListModel 有一个父级,因为当它传递给 QStringListModel 时,Qt 可能不会取得它的所有权。组合框。当子对象以这种方式链接在一起时,Qt 应始终正确处理子对象的删除。因此代码示例将变为:

import sys
from PyQt4 import QtGui, QtCore

app = QtGui.QApplication(sys.argv)

combobox = QtGui.QComboBox()

data = []
data.append("one")
model = QtGui.QStringListModel(data, combobox)
combobox.setModel(model)

combobox.show()

sys.exit(app.exec_())

关于python - pyqt中GUI的模型 View 实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887777/

相关文章:

Java作为dd的前端将iso复制到USB

python - 在 PyQt 中缩放 QWidget

python - 如何在 Windows 10 中更改 cmd 上的默认 Python 版本

python - 在 Python 中将复杂的键(元组)存储到 JSON 中

python - 无法在新的 ubuntu 分区 : tensorflow-0. 上安装 tensorflow 8.0-cp34-cp34m-linux_x86_64.whl 在此平台上不受支持

wpf - 哪个图形子系统用于触摸屏信息亭开发

ios - 如何将 UILabel 与 UIViewController 的角对齐

python - 当在枚举值中使用类函数时,“函数”对象没有属性 'value'

mysql - PYQT : qCombobox displaying Column "Name" but passing Column "ID"

python - 更新 LCD 数字倒计时