解决pyqt5 控件右键菜单QMenu()出现后不消失的bug

最近在用pyqt5(其实我用的是pyside2)写一个界面,在给QListWidget添加了右键菜单QMenu()之后,总是出现右键弹出菜单后,左键点击其他地方想关闭菜单,但是需要左键点击好多次才能将右键菜单关闭,而且在此期间,右键菜单还会跟着鼠标左键点击的位置到处跑。

经过一番查找,终于找到了bug的原因,是下面这两行代码的位置写错了

self.listWidget.setContextMenuPolicy(Qt.CustomContextMenu)
self.listWidget.customContextMenuRequested.connect(self.listWidget_fun)  # 连接到右键菜单显示函数

我们都知道这两行代码是用来给控件添加右键菜单的,但是我最开始的时候,将这两行代码写在了一个函数中,而这个函数被一个buuton触发(用来改变QListWidget的内容),所以就造成了每次点击button后,上面两行代码就会被执行一次,也就是说我点一次button,就会给QListWidget添加一个右键菜单,所以我点击的次数越多,右键菜单就越多。

问题找到了以后就好办了,将上面两行代码写到主窗口的__init__函数中,让它们只在主窗口启动的时候执行一次。

这个bug就解决了


版权声明:本文为runwuwusheng1230原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。