PyQt5 无边框(无frame)拖拽与缩放后,原界面按钮无法点击问题

倾城一少 倾城一少 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
RT,按照下面的代码实现了界面的拖拽和缩放,但是界面的功能按键不能用了,好像一直在def nativeEvent(self,eventType,message)事件中循环,请教大家怎么解决。
下面是代码:
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt
import sip
from ctypes.wintypes import *
from PyQt5.QtWidgets import (QWidget, QLabel,
QComboBox, QApplication)

#print (help(MSG))
PADDING = 2
#UP,DOWN,LEFT,RIGHT,LEFTTOP,LEFTBOTTOM,RIGHTTOP,RIGHTBOTTOM,UNDIRECT = range(9)
HTLEFT = 10
HTRIGHT = 11
HTTOP = 12
HTTOPLEFT = 13
HTTOPRIGHT = 14
HTBOTTOM = 15
HTBOTTOMLEFT = 16
HTBOTTOMRIGHT = 17
HTCAPTION = 2

class CustomWidget(QWidget):
def __init__(self,parent=None):
QWidget.__init__(self,parent)
self.setWindowFlags(Qt.FramelessWindowHint)
self.initUI()

def isInTitle(self, xPos, yPos):
return yPos < 30

def GET_X_LPARAM(self, param):
return param & 0xffff

def GET_Y_LPARAM(self, param):
return param >> 16

def nativeEvent(self,eventType,message):
result = 0
msg2 = ctypes.wintypes.MSG.from_address(message.__int__())
minV,maxV = 1,20
if msg2.message == 0x0084:
#print(msg2)
xPos = self.GET_X_LPARAM(msg2.lParam) - self.frameGeometry().x()
yPos = self.GET_Y_LPARAM(msg2.lParam) - self.frameGeometry().y()
# if self.childAt(xPos,yPos) == 0:
# result = HTCAPTION
# else:
# return (False,result)
if(xPos > minV and xPos < maxV):
result = HTLEFT
elif(xPos > (self.width() - maxV) and xPos < (self.width() - minV)):
result = HTRIGHT
elif(yPos > minV and yPos < maxV):
result = HTTOP
elif(yPos > (self.height() - maxV) and yPos < (self.height() - minV)):
result = HTBOTTOM
elif(xPos > minV and xPos < maxV and yPos > minV and yPos < maxV):
result = HTTOPLEFT
elif(xPos > (self.width() - maxV) and xPos < (self.width() - minV) and yPos > minV and yPos < maxV):
result = HTTOPRIGHT
elif(xPos > minV and xPos < maxV and yPos > (self.height() - maxV) and yPos < (self.height() - minV)):
result = HTBOTTOMLEFT
elif(xPos > (self.width() - maxV) and xPos < (self.width() - minV) and yPos > (self.height() - maxV) and yPos < (self.height() - minV)):
result = HTBOTTOMRIGHT
else:
result = HTCAPTION
return (True,result)
ret= QWidget.nativeEvent(self,eventType,message)
return ret

def initUI(self):
self.lb1 = QLabel("Ubuntu", self)
combo = QComboBox(self)
combo.addItem("Ubuntu")
combo.addItem("Mandriva")
combo.addItem("Fedora")
combo.addItem("Arch")
combo.addItem("Gentoo")

combo.move(50, 50)
self.lb1.move(50, 150)

combo.activated[str].connect(self.onActivated)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QComboBox')
self.show()

def onActivated(self, text):
self.lb1.setText(text)
self.lb1.adjustSize()





if __name__ == '__main__':
app = QApplication([])
try:
w = CustomWidget ()
w.show()
except:
import traceback
traceback.print_exc()

app.exec_()

...全文

相关推荐

python 中pyqt5 树节点点击实现多窗口切换问题

主要介绍了python 中pyqt5 树节点点击实现多窗口切换问题,文中给大家介绍了python pyqt5 点击按钮来打开另一个窗口的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴借鉴价值,需要的朋友可以参考下

weixin_38725531

YOLO11光伏缺陷检测:小目标、高鲁棒、工业级落地实践

光伏缺陷检测属于典型的小目标、弱纹理、类间相似度高的工业视觉任务,其核心挑战在于数据特性与真实部署约束的双重适配。传统通用目标检测模型如YOLOv8/v10在微裂纹召回、热斑椭圆拟合、嵌入式推理稳定性等方面存在结构性短板。YOLO11通过多尺度特征融合增强模块(MS-FEM)、缺陷语义感知头(DSA-Head)和嵌入式友好型推理调度器(EFS-Scheduler)实现网络级定制,在RTX3060等边缘设备上达成低误报、高解释性、GUI可操作的工程闭环。该方案已验证于2100张实采光伏图像,覆盖隐裂分级标注、

weixin_33829657

PyQt5+OpenCV播放本地视频GUI窗口 mp4等格式

# PyQt5+OpenCV播放本地视频GUI窗口 mp4等格式 1. 使用QTimer定时刷新画面 2. 播放/暂停按键

「已注销」

pyCharm工程pyQt5利用OpenCV3调用本地摄像头

pyCharm工程pyQt5利用OpenCV3调用本地摄像头、使用了QTimer定时器触发实时显示摄像头视频帧。

奋斗无止境_分享是一种快乐

pyqt5的圆形laebl显示摄像头

pyqt5圆形label打开摄像头

jun_军
评论
收藏 已收藏
分享
返回顶部
倾城一少
倾城一少 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
脚本语言 37,738 成员 34,208 内容