当PyQt中的属性更改时,如何更改qml字段?

时间:2018-11-15 10:55:43

标签: python pyqt qml pyqt5

我想将任何文件拖放到窗口,我想在App中获取该文件名(从QObject继承),并将TextField.text更改为文件名。我在写下一个代码。

// main.qml

import QtQuick 2.6
import QtQuick.Controls 1.4

ApplicationWindow {
    TextField {
            text: app.inputFilename
        }

    DropArea {
        anchors.fill: parent
        onDropped: {
            app.inputFilename = drop.text
        }
    }
}


# main.py
class App(QObject):

    def __init__(self):
        super(App, self).__init__()
        self.input_filename = ''

    @pyqtProperty('QString')
    def inputFilename(self):
        return self.input_filename

    @inputFilename.setter
    def inputFilename(self, filename):
        if filename.startswith('file:///'):
            self.input_filename = filename[8:]
        else:
            self.input_filename = filename

app = App()
gui_app = QGuiApplication([])
engine = QQmlApplicationEngine()
root_context = engine.rootContext()
root_context.setContextProperty("app", app)
engine.load(QUrl.fromLocalFile('qml\MainWin.qml'))
engine.quit.connect(gui_app.quit)
sys.exit(gui_app.exec_())

结果是我将文件名输入到inputFilename,并且运行良好。但是我希望TextField.text也能更改,因为TextField.text:app.inputFilename(在qml代码中)。当app.inputFilename在python端更改时,我该怎么做才能更改TextField.text?我知道我可以在python端使用信号,并在调用inputFilename时发出它。但是也许存在其他方式吗?

0 个答案:

没有答案