解决PyQt5 无边框后窗口的移动问题
由于隐藏了标题栏无法通过点击标题栏来实现窗口的移动,这时候我们可以通过鼠标事件来移动窗口
第一步:判断鼠标左键是否被按下,如果按下则将flag设为True并获取当前的位置
第二步:判断鼠标是否移动并且左键被按下,若移动了计算移动的距离在移动窗口
第三步:若鼠标释放了则将flag设为False
具体做法:重写窗口类自带的三个函数
defmousePressEvent(self,event): ifevent.button()==Qt.LeftButton: self.m_flag=True self.m_Position=event.globalPos()-self.pos()#获取鼠标相对窗口的位置 event.accept() self.setCursor(QCursor(Qt.OpenHandCursor))#更改鼠标图标 defmouseMoveEvent(self,QMouseEvent): ifQt.LeftButtonandself.m_flag: self.move(QMouseEvent.globalPos()-self.m_Position)#更改窗口位置 QMouseEvent.accept() defmouseReleaseEvent(self,QMouseEvent): self.m_flag=False self.setCursor(QCursor(Qt.ArrowCursor))
最后最小化和关闭可以设置两个按钮,通过点击按钮来触发
@pyqtSlot() defon_pushButton_clicked(self): """ 关闭窗口 """ self.close() @pyqtSlot() defon_pushButton_2_clicked(self): """ 最小化窗口 """ self.showMinimized()
ps:设置无边框和背景透明
#设置窗体无边框 #self.setWindowFlags(Qt.FramelessWindowHint) #设置背景透明 #self.setAttribute(Qt.WA_TranslucentBackground)
效果图
win10自带的录屏只能录当前软件那个区域。。。。。。。
就这样吧~
补充:pyqt5_控件_自定义无边框窗体拖动
我就废话不多说了,大家还是直接看代码吧~
fromPyQt5.QtWidgetsimport* fromPyQt5.QtCoreimport* fromPyQt5.QtGuiimport* importsys classExample(QWidget): _startPos=None _endPos=None _isTracking=False def__init__(self): super().__init__() self._initUI() def_initUI(self): self.setFixedSize(QSize(400,400)) self.setWindowFlags(Qt.FramelessWindowHint)#无边框 self.show() defmouseMoveEvent(self,e:QMouseEvent):#重写移动事件 self._endPos=e.pos()-self._startPos self.move(self.pos()+self._endPos) defmousePressEvent(self,e:QMouseEvent): ife.button()==Qt.LeftButton: self._isTracking=True self._startPos=QPoint(e.x(),e.y()) defmouseReleaseEvent(self,e:QMouseEvent): ife.button()==Qt.LeftButton: self._isTracking=False self._startPos=None self._endPos=None if__name__=='__main__': app=QApplication(sys.argv) ex=Example() sys.exit(app.exec_())
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。