【发布时间】:2014-11-19 14:09:41
【问题描述】:
我有 pyqt5 应用程序,它使用 qml2 作为前端。在从开发人员(我的)机器迁移到另一台(mint qiana、debian sid)时,它坚持导入QtQuick.Dialogs 1.1。
即使在运行 debian-sid 图像的新 docker 容器上也可以重现错误。
我的测试python脚本:
from PyQt5 import QtWidgets, QtWidgets, QtCore, uic
from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
from PyQt5.QtQml import qmlRegisterType, QQmlComponent, QQmlEngine
class CommonQMLWindow():
def __init__(self, qml_file_name):
self._engine = QQmlEngine()
component = QQmlComponent(self._engine)
# STUCK HERE (LINE BELOW - component.loadUrl)
component.loadUrl(QUrl(qml_file_name))
self.qml_window = component.create()
if self.qml_window is None:
for error in component.errors():
print(error.toString())
exit(1)
from ui import commonqmlwindow
加载中:
from PyQt5 import QtWidgets, QtWidgets, QtCore, uic
from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
from PyQt5.QtQml import qmlRegisterType, QQmlComponent, QQmlEngine
class MainWindow(commonqmlwindow.CommonQMLWindow):
def __init__(self, parent=None):
commonqmlwindow.CommonQMLWindow.__init__(self, 'ui/test.qml')
qml 文件:
import QtQuick 2.0
import QtQuick.Dialogs 1.1
import QtGraphicalEffects 1.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.2
import "." as Controls
import "../uihelpers.js" as UIHelpers
TextField {
id: rootItem
property bool pickDirectory: false
property alias pickerTitle: picker.title
property alias pickerSelectMask: picker.nameFilters
property alias selectedUrl: picker.fileUrl
readOnly: true
FileDialog {
id: picker
selectFolder: rootItem.pickDirectory ? true : false
}
}
main.py:
app = QtWidgets.QApplication(sys.argv)
main_window = mainwindow.MainWindow()
app.exec()
所有软件包都已安装(对于 qml2、python3、pyqt5 和 qt5)适用于除此之外的任何东西。
这种行为发生在Linux Mint qiana、Debian sid。当我评论 import statment (//import QtQuick.Dialogs 1.1) 时它可以工作,但我需要 FileDialog..
版本:
Qt 版本:5.3.2
PyQt 版本:5.3.2
Python 版本:3.4.2
UPD:它甚至适用于 Mac OS X Yosemite,但不适用于 debian。
【问题讨论】:
-
无法理解第二段 - 你能澄清一下吗?
-
关于
docker容器? -
是的,就是这个。另外:您是否收到任何错误消息?
-
没有任何错误信息,只是在启动时冻结。我已经适当地更新了问题。