pyqt5 tabwidget信号触发

在用Python PYQT5写界面时用到Qtabwidget控件,在主界面进行操作后会添加一个tabwidget对象,创建这个tab的函数是单独定义的,而不是放在默认的setupui里。因为我希望打开程序时是空白的,只有进行操作发出信号时才会创建并添加这个tab,并且这个tab页会反复添加,通过把它们放进一个大列表来区分它们。这样会有一个问题,就是我想在tab页面进行操作发出一些信号,这个信号不能写在主界面的setupui里。目前想到的是改写鼠标单击事件来强制通过满足条件时触发这些信号,但是感觉这样不好。请问应该如何实现这样一个问题?另外还想问一下这个鼠标单击事件通过以下代码改写后,只有在界面空白处单击时才会触发,有办法实现鼠标在无论空白还是控件内单击都会触发吗?

def mousePressEvent(self,event): 
    if event.buttons () == QtCore.Qt.LeftButton:
        self.treeWidget.setCurrentItem(None)

参考GPT和自己的思路:对于第一个问题:
你可以在主界面中通过信号槽机制连接tabwidget对象的信号和自定义函数,当tab页面进行操作时,即可触发这些信号。具体实现可以参考下面的代码:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi()

    def setupUi(self):
        # 创建tabwidget对象并设置信号
        self.tabWidget = QtWidgets.QTabWidget(self)
        self.tabWidget.tabCloseRequested.connect(self.closeTab)

    def createTab(self):
        # 创建tab页面并添加到tabwidget中
        newTab = QtWidgets.QWidget()
        self.tabWidget.addTab(newTab, "New Tab")

    def closeTab(self, index):
        # 关闭tab页面并从大列表中移除
        self.tabWidget.removeTab(index)
        self.tabsList.pop(index)

class TabPage(QtWidgets.QWidget):
    def __init__(self, parent=None, tabsList=[]):
        super(TabPage, self).__init__(parent)
        self.tabsList = tabsList

    def someOperation(self):
        # 进行操作并发出信号
        self.tabOperationSignal.emit()

对于第二个问题:
你可以重写父控件的mousePressEvent,并调用父控件的mousePressEvent方法,这样就能让鼠标在控件内点击时也能触发事件了。具体实现可以参考下面的代码:

def mousePressEvent(self, event):
    if event.buttons() == QtCore.Qt.LeftButton:
        if not self.rect().contains(event.pos()):
            return
    super().mousePressEvent(event)
    self.treeWidget.setCurrentItem(None)
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^