PySide从实战开始学习系列(四)信号和槽的初步认识

版权声明: 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后都会列出所有方法、信号和槽,自行查看吧。


信号这东西刚开始理解起来有点费劲,但用习惯了会发现非常好用,多多练习!


下一篇开始写菜单和对话框

猜你喜欢

转载自blog.csdn.net/jeremyjone/article/details/81013851