如何解决菜单行为不一致
当用户单击我的QWidget的标题栏时,我正在尝试实现上下文菜单
按照这篇文章,我已经使用nativeEvent拼凑了一个解决方案: Qt detecting mouse click on titleBar (Windows)
它会根据需要弹出一个菜单,但是如果我在菜单打开时再次单击标题栏,我不知道菜单会发生什么,当我再次单击标题栏时,菜单消失并闪烁然后最终回来。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import ctypes.wintypes
import logging
from win32con import *
import win32api
class W(QTabWidget):
def nativeEvent(self,eventType,message):
click_menu = QMenu(self)
click_menu.addAction("Yay")
try:
msg = ctypes.wintypes.MSG.from_address(message.__int__())
except:
logging.error("",exc_info=True)
if eventType == "windows_generic_MSG":
if msg.message == WM_NCLBUTTONDOWN:
mouse_x = win32api.LOWORD(msg.lParam)
mouse_y = win32api.HIWORD(msg.lParam)
frame = self.frameGeometry()
content = self.geometry()
print(mouse_x,mouse_y,frame,content)
if mouse_y < content.y() and mouse_y >= frame.y():
click_menu.exec_(QPoint(mouse_x,mouse_y))
return False,0
app = QApplication([])
w = W()
w.resize(1000,100)
w.move(0,0)
w.show()
app.exec_()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。