ali*_*izx 2 python user-interface pyqt qcombobox qstringlistmodel
关闭应用程序时,以下示例代码与此错误崩溃:
QBasicTimer::start: QBasicTimer can only be used with threads started with QThread
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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_())
Run Code Online (Sandbox Code Playgroud)
我发现这是关于使用模型,但我不知道如何解决它.
编辑:os:win 7 64bit pyqt4
程序没有"崩溃":它只是在正常关机过程中打印错误信息.
显示消息的原因是垃圾收集的副作用.当python关闭时,对象被删除的顺序可能是不可预测的.这可能导致C++端的对象以"错误"的顺序被删除,因此当发生这种情况时Qt有时会抱怨.
"修复"示例代码的一种方法是简单地重命名一些PyQt对象.如果我改名字combobox来combo,例如,该错误信息消失.这没有什么神秘之处 - 它只是改变了删除对象的顺序.
但另一个更强大的解决问题的方法是确保QStringListModel拥有父级,因为当Qt传递给组合框时,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_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |