Python 为什么QMenu在调用函数后重新出现
此示例创建一个QListWidget,并启用其项目右键单击。 右键单击将显示QMenu。选择菜单将打开当前用户主目录中的OS文件浏览器。 关闭文件浏览器后,QMenu重新出现,这非常烦人。 如何避免这种不良行为Python 为什么QMenu在调用函数后重新出现,python,qt,pyqt,Python,Qt,Pyqt,此示例创建一个QListWidget,并启用其项目右键单击。 右键单击将显示QMenu。选择菜单将打开当前用户主目录中的OS文件浏览器。 关闭文件浏览器后,QMenu重新出现,这非常烦人。 如何避免这种不良行为 import sys, subprocess from os.path import expanduser from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self):
import sys, subprocess
from os.path import expanduser
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
layout = QtGui.QVBoxLayout(self)
self.listWidget = QtGui.QListWidget()
self.listWidget.addItems(('One','Two','Three','Four','Five'))
self.listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.listWidget.connect(self.listWidget,QtCore.SIGNAL('customContextMenuRequested(QPoint)'),self.showMenu)
self.menu=QtGui.QMenu()
menuItem=self.menu.addAction('Open Folder')
self.connect(menuItem,QtCore.SIGNAL('triggered()'),self.openFolder)
layout.addWidget(self.listWidget)
def showMenu(self, QPos):
parentPosition=self.listWidget.mapToGlobal(QtCore.QPoint(0, 0))
menuPosition=parentPosition+QPos
self.menu.move(menuPosition)
self.menu.show()
def openFolder(self):
if sys.platform.startswith('darwin'):
subprocess.call(['open', '-R',expanduser('~')])
if sys.platform.startswith('win'):
subprocess.call(['explorer','"%s"'%expanduser('~')])
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
我想到了两个想法:
QMenu()
时,尝试将self
添加为构造函数参数,并将QWidget
作为父项传递openFolder()
方法中的self.menu.hide()
子流程
打开资源管理器不同,Qt中有一个更好的跨平台解决方案,名为QDesktopServices
——请参阅尝试禁用
窗口
小部件的上下文菜单。