Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不一致的菜单行为_Python_Pyqt_Pywin32_Win32com - Fatal编程技术网

Python 不一致的菜单行为

Python 不一致的菜单行为,python,pyqt,pywin32,win32com,Python,Pyqt,Pywin32,Win32com,当用户单击QWidget的标题栏时,我试图实现一个上下文菜单 根据这篇文章,我使用nativeEvent拼凑了一个解决方案: 它会根据需要弹出一个菜单,但如果我在菜单打开时再次单击标题栏,我不知道我的菜单会发生什么,它会消失,然后在我再次单击标题栏时闪烁,然后最终返回 从PyQt5.QtWidgets导入* 从PyQt5.QtCore导入* 导入ctypes.wintypes 导入日志记录 从win32con导入* 导入win32api W类(QTabWidget): def nativeEv

当用户单击QWidget的标题栏时,我试图实现一个上下文菜单

根据这篇文章,我使用nativeEvent拼凑了一个解决方案:

它会根据需要弹出一个菜单,但如果我在菜单打开时再次单击标题栏,我不知道我的菜单会发生什么,它会消失,然后在我再次单击标题栏时闪烁,然后最终返回

从PyQt5.QtWidgets导入*
从PyQt5.QtCore导入*
导入ctypes.wintypes
导入日志记录
从win32con导入*
导入win32api
W类(QTabWidget):
def nativeEvent(自身、事件类型、消息):
单击菜单=QMenu(自我)
单击菜单。添加操作(“Yay”)
尝试:
msg=ctypes.wintypes.msg.from_地址(message.\uu int\uu())
除:
logging.error(“,exc_info=True)
如果eventType==“windows\u通用\u MSG”:
如果msg.message==WM\u NCLBUTTONDOWN:
鼠标x=win32api.LOWORD(msg.lParam)
鼠标_y=win32api.HIWORD(msg.lParam)
frame=self.frameGeometry()
content=self.geometry()
打印(鼠标x、鼠标y、框架、内容)
如果鼠标y=frame.y():
单击菜单。执行(点(鼠标x,鼠标y))
返回False,0
app=QApplication([])
w=w()
w、 调整大小(1000100)
w、 移动(0,0)
w、 show()
app.exec()
QMenu.exec()正在阻塞,在关闭之前不会返回,这可能是您的问题的症状(我现在不在Windows上,因此无法准确测试)。如果您只需使用
单击菜单。弹出(QPoint(mouse\ux,mouse\uy))
?此外,出于性能原因,您应该仅在最后一条
if
语句中创建QMenu实例。