如何将Qt Quick中的按钮绑定到Python PyQt 5

Dai*_*vid 5 python qt pyqt qml qt-quick

如何将我在.qml脚本中创建的按钮绑定到python PyQt5代码?

示例:python:

import sys
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
  app = QApplication(sys.argv)
  engine = QQmlApplicationEngine()
  ctx = engine.rootContext()
  ctx.setContextProperty("main", engine)

  engine.load('test.qml')

  win = engine.rootObjects()[0]
  win.show()
  sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

QML:

import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.1

ApplicationWindow {
 title: qsTr("Test Invoke")

 width: 200
 height: 100

 Button{
  y : 70
  text : "About"
  onClicked: {
   print('Hello')
  }

 }
}
Run Code Online (Sandbox Code Playgroud)

单击按钮时如何使用Python执行某些操作?另外:是否有人拥有良好的示例或文档资源.关于pyqt + qml(快速qt)?

Oli*_*ver 3

如果您为按钮命名,则可以连接到其 onClick 信号,或连接到它在 中发出的自定义信号onClicked。例子:

ApplicationWindow {
 title: qsTr("Test Invoke")
 width: 200
 height: 100

 Button {
  signal messageRequired
  objectName: "myButton"
  y : 70
  text : "About"
  onClicked: messageRequired()

 }
}
Run Code Online (Sandbox Code Playgroud)

请注意 Button 中的信号和 objectName 属性。那么之前的Python代码exec可以是这样的:

def myFunction():
    print 'handler called'

button = win.findChild(QObject, "myButton")
button.messageRequired.connect(myFunction)
button.clicked.connect(myFunction) # works too
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的按钮中,onClicked仅发出messageRequired信号,因此最好删除自定义信号并clicked直接连接。当您单击按钮时,两个onClicked()以及连接到的任何插槽clicked都会被调用。