目录
一、安装依赖
pip install watchpoints
二、使用示例
import operator
from PySide6.QtWidgets import QApplication, QVBoxLayout, QLineEdit, QWidget, QLabel
from watchpoints import watch
class StudentDialog(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 初始化UI
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# 定义data
self.data = {
"_value": None
}
# 创建一个Label组件用来显示数据
self.edit_username = QLabel()
# 将_value自动绑定到Label上,_value更新时,QLabel自动更新
watch(self.data['_value'], callback=lambda frame, elem, exec_info: self.edit_username.setText(elem.obj))
# 创建一个LineEdit控件用来输入数据
text_edit = QLineEdit()
# 将输入的值自动绑定到_value
text_edit.textChanged.connect(lambda: operator.setitem(self.data, '_value', text_edit.text()))
self.layout.addWidget(self.edit_username)
self.layout.addWidget(text_edit)
if __name__ == '__main__':
app = QApplication([])
dialog = StudentDialog()
dialog.show()
app.exec()
三、效果
四、缺陷
watchpoints虽然能监控数据的变化,但是会明显拖慢程序的速度!越大的项目越是明显!在后续的博客中我将放弃使用watchpoints,转而采用装饰器的方式来实现双向绑定。