Python pyqt - 确定用户操作是否发出信号

时间:2017-11-08 09:45:53

标签: qt pyqt

我有一个QtableView,在添加新数据时会调整其大小。用户还可以通过与horizontalHeader的直接交互(点击拖动)来更改列宽。两个事件都发出信号QtableView.horizontalHeader().sectionResized()

我想确定用户是通过更改列宽还是通过函数调用刷新来发出此信号。我如何区分事件?

我尝试使用sender(),但这两个操作都指的是同一个发件人。

1 个答案:

答案 0 :(得分:1)

这是你必须自己做的事情 - 没有神奇的方法。

可能有可能继承QHeaderView并监视可能触发调整大小的各种用户启动的事件,但这种解决方案可能很难做到。一个更简单,更明显的解决方案是在将新数据添加到表中时设置标志,并在调整列大小后将其取消设置。然后你可以检查连接到sectionResized信号的任何插槽内的标志,看看是什么触发了它:

def updateTable(self):
    self._updating = True
    # add new data...
    # resize columns...
    self._updating = False

def handleSectionResized(self):
    if self._updating:
        print('updating')
    else:
        print('user interaction')