首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTabWidget的PyQt鼠标事件

QTabWidget的PyQt鼠标事件
EN

Stack Overflow用户
提问于 2012-02-25 15:24:09
回答 1查看 5.4K关注 0票数 5

我想检测鼠标中键在QTabWidget上的点击。我原以为QWidget上会有一个与鼠标事件相关的信号,但我看到的都是方法。

为了做我想做的事情,我需要子类化QTabWidget然后重写上述方法吗?还是我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-26 00:01:20

您可以在QTabBar (由QTabWidget.tabBar()返回)上安装事件筛选器以接收和处理按下和释放事件,也可以通过子类QTabBar来重新定义mousePressEventmouseReleaseEvent,并将QTabWidgetQTabBar替换为QTabWidget.setTabBar()

使用事件过滤器的

  1. 示例:

self.tabWidget.tabBar().installEventFilter(self) MainWindow(QMainWindow):def __init__(self):QMainWindow(QMainWindow,self).__init__() self.tabWidget = QTabWidget(self) self.setCentralWidget(self.tabWidget) MainWindow self.tabWidget.tabBar().previousMiddleIndex = -1 def eventFilter(self,object,事件):如果QEvent.MouseButtonPress中的object == self.tabWidget.tabBar()和\ event.type(),QEvent.MouseButtonRelease和\ event.button() == Qt.MidButton: tabIndex = object.tabAt(event.pos()) if event.type() == QEvent.MouseButtonPress: object.previousMiddleIndex = tabIndex else: if tabIndex != -1和tabIndex == object.previousMiddleIndex:self.onTabMiddleClick(tabIndex) object.previousMiddleIndex = -1 return True return False #使用单击的选项卡定义onTabMiddleClick的索引调用的函数(自身,索引):使用QTabBar子类传递

  • 示例:

类TabBar(QTabBar):middleClicked = pyqtSignal(int) def __init__(self):super(QTabBar,self).__init__() self.previousMiddleIndex = -1 def mousePressEvent(self,mouseEvent):if mouseEvent.button() == Qt.MidButton: self.previousIndex = self.tabAt(mouseEvent.pos()) QTabBar.mousePressEvent(self,mouseEvent) def mouseReleaseEvent(self,mouseEvent):if mouseEvent.button() == Qt.MidButton and \ self.previousIndex == self.tabAt(mouseEvent.pos()):self.middleClicked.emit( self.previousIndex ) self.previousIndex= -1 QTabBar.mouseReleaseEvent(self,mouseEvent)类MainWindow(QMainWindow):def __init__(self):super(QMainWindow,self).__init__() self.tabWidget = QTabWidget(self) self.setCentralWidget(self.tabWidget) self.tabBar = TabBar() self.tabWidget.setTabBar(self.tabBar) self.tabBar.middleClicked.connect(self.onTabMiddleClick) #使用单击的选项卡的索引调用的函数def onTabMiddleClick(self,self.tabWidget.setTabBar):传递

(如果您想知道为什么这么简单的任务有这么多代码,单击被定义为在大致相同的位置按下事件和释放事件,因此按下的制表符的索引必须与释放的制表符相同)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9442165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档