版权声明: https://blog.csdn.net/jeremyjone/article/details/81013851
信号和槽是Qt的特色,同样也是PySide的特点,信号和槽的特点:
一个信号可以连接多个槽
一个信号可以连接另一个信号
信号参与可以是任何python类型
一个槽可以监听多个信号
信号与槽的连接方式是同步连接,也可以是异步连接
信号与槽的连接可能会跨线程
信号可能会断开
信号有三个方法:
def connect (receiver)
def disconnect (receiver)
def emit (*args)
我们需要使用到connect(),通过官方的描述,
Signal.connect(receiver[, type=Qt.AutoConnection])
Create a connection between this signal and a receiver, the receiver can be a Python callable, a Slot or a Signal.
我们可以知道,connect方法传入一个接收函数,建立联系。我们利用之前的代码继续实现,在定义左侧QTreeWidget时加入下面代码:
# 点击显示信息的signal
self.tree.itemClicked.connect(self.itemClickedChange)
这样就添加了点击的信号,注意,itemClicked是QTreeWidget的信号函数,通过这个信号的connect连接到自定义的itemClickedChange方法(如下:)
def itemClickedChange(self, item, column):
# 将数据显示在右侧的table中
row_num = 0 # 行数
self.table.clear()
for key, value in item.data(0, QtCore.Qt.UserRole).items():
if type(value) == list:
# 忽略值为list类型的键值(不显示子项)
continue
# 设置键
new_table_item0 = QtGui.QTableWidgetItem(key)
self.table.setItem(row_num, 0, new_table_item0)
# 设置值
new_table_item1 = QtGui.QTableWidgetItem(value)
self.table.setItem(row_num, 1, new_table_item1)
row_num += 1
# 更新状态栏,提示选中项
self.status.showMessage("Select %s" % new_table_item1.text())
这样,当我们点击每一个TreeWidget的item时,都会有一个信号连接到这个函数,调用这个函数进行操作,而这个函数实现了右侧table的显示功能,所以也就实现了左侧Tree点击展示在右侧table中。
- 信号在PySide中多种多样,每个widget都有不同的信号,需要查阅官方文档,点击不同widget后都会列出所有方法、信号和槽,自行查看吧。
信号这东西刚开始理解起来有点费劲,但用习惯了会发现非常好用,多多练习!
下一篇开始写菜单和对话框