| 86 | |
| 87 | |
| 88 | class Window(QWidget): |
| 89 | # 定义一个时间信号 |
| 90 | timerSignal = pyqtSignal(str) |
| 91 | |
| 92 | def __init__(self, *args, **kwargs): |
| 93 | super(Window, self).__init__(*args, **kwargs) |
| 94 | layout = QVBoxLayout(self) |
| 95 | layout.addWidget(QPushButton('Python调用qml中的函数', |
| 96 | self, clicked=self.callQmlFunc)) |
| 97 | self.resultView = QTextBrowser(self) |
| 98 | layout.addWidget(self.resultView) |
| 99 | self._timer = QTimer(self, timeout=self.onTimeout) |
| 100 | self._timer.start(2000) |
| 101 | |
| 102 | def onTimeout(self): |
| 103 | # 定时器发送信号通知qml |
| 104 | self.timerSignal.emit('定时器发来:' + str(time())) |
| 105 | |
| 106 | def callQmlFunc(self): |
| 107 | # 主动调用qml中的appendText函数 |
| 108 | engine.rootObjects()[0].appendText('我是被Python调用了') |
| 109 | |
| 110 | @pyqtSlot(int) |
| 111 | def onValueChanged(self, value): |
| 112 | # qml中的自定义信号valueChanged所绑定的槽函数 |
| 113 | self.resultView.append('拉动条值: %s' % value) |
| 114 | |
| 115 | @pyqtSlot(str, result=str) # 可以获取返回值 |
| 116 | def testSlot(self, name): |
| 117 | # 被qml调用的函数 |
| 118 | self.resultView.append('我被主动调用: %s' % name) |
| 119 | return str(len(name)) |
| 120 | |
| 121 | |
| 122 | if __name__ == '__main__': |