【发布时间】:2018-02-01 13:23:51
【问题描述】:
我有一个导致崩溃的小示例应用程序。
main.py
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
def run():
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl('main.qml'))
if not engine.rootObjects():
return -1
return app.exec_()
if __name__ == '__main__':
sys.exit(run())
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
FileDialog {
id: fileDialog
selectFolder: true
onAccepted: {
console.log('activated')
}
}
Button {
anchors.centerIn: parent
text: "Open"
onClicked: {
fileDialog.open()
}
}
}
要导致崩溃,只需打开应用程序,单击按钮,选择目录,接受,然后关闭应用程序。
控制台显示警告消息:QObject::startTimer: Timers can only be used with threads started with QThread
然后应用程序就崩溃了。任何线索为什么或如何获得错误消息/堆栈跟踪?
环境:Windows 10、python 3.6.1、PyQt5 5.9
【问题讨论】:
-
我遇到了这个问题,我知道避免崩溃的唯一方法是动态创建
FileDialoglike this。任何想法也将不胜感激。 -
是的,这也没有帮助,但这似乎已经“解决”了问题:stackoverflow.com/a/21614295/808727