PyQt5-如何显示一个没有标题栏的顶层窗口

2024-10-14 17:37:13

无标题栏顶层窗口的设置方法。鼠标拖动窗口的设置。

1.取消标题栏

1、导入模块,创建应用程序对象。from PyQt5.Qt import *import syapp = QApplication(sys.argvsys.exit(app.exec_())

PyQt5-如何显示一个没有标题栏的顶层窗口

2、自定义一个窗口类,并实例化一个窗口。设置相关属性。

PyQt5-如何显示一个没有标题栏的顶层窗口

3、取消窗口标题栏:使用setWindowFlags(Qt.FramelessWindowHint)函数。

PyQt5-如何显示一个没有标题栏的顶层窗口

2.重新设置相关控件

1、创建关闭按钮,并设置位置,大小。将按钮宽高,边距设置为变量,可利于统一改变。

PyQt5-如何显示一个没有标题栏的顶层窗口

2、为关闭按钮添加槽函数,使关闭功能生效。cloBTN.pressed.connect(self.close)

PyQt5-如何显示一个没有标题栏的顶层窗口

3、创建最小化按钮,并设置位置,大小。

PyQt5-如何显示一个没有标题栏的顶层窗口

4、为最小化按钮添加槽函数,minBTN.pressed.connect(self.showMinimized)

PyQt5-如何显示一个没有标题栏的顶层窗口

3.设置鼠标拖动窗口移动

1、上面步骤虽然重新设置了外形,但是不能拖动窗口移动。可以通过鼠标事件来完成这些动作。重写鼠标按下事件,按下鼠标时获取鼠标相对于桌面的坐标,以及窗口的桌面坐标。而且为了能让别的函数调用,把获得的值设置为公用变量。鼠标按下坐标:self.mouseX = evt.globalX();self.mouseY = evt.globalY()鼠标按下时窗口坐标:self.windowX = self.x();self.windowY = self.y()

PyQt5-如何显示一个没有标题栏的顶层窗口

2、①重写鼠标移动事件,获取鼠标移动后桌面坐标:----evt.globalX() ; evt.globalY()②获取鼠标的移动距离,----distX = evt.globalX() - self.mouseX----distY = evt.globalY() - self.mouseY③把这个距离加到窗口坐标,就是窗口的移动距离。----move(self.windowX + distX, self.windowY + distY)

PyQt5-如何显示一个没有标题栏的顶层窗口

3、一个问题:①按下鼠标键可以拖动窗口,但有一个跟踪鼠标的函数self.setMouseTracking(True),在不安下鼠标的情况下,窗口也能跟踪鼠标。②这个时候鼠标没有按下,mousePressEvent(self, evt)函数是没有执行的,就不会产生的公用变量,③而mouseMoveEvent(self, evt)函数此时已经执行,找不到变量就直接崩溃了。

PyQt5-如何显示一个没有标题栏的顶层窗口

4、为了防止这个情况,必须要让mousePressEvent(self, evt)函数先执行,然后再执行mouseMoveEvent(self, evt)函数。①加入一个值为False的公用变量self.moveFlage=False②在鼠标按下事件函数里加入self.moveFlage=True。目的就是,只有鼠标按下时,self.moveFlage=True。③在鼠标移动事件函数里,加入判断,if self.moveFlage==True,目的就是鼠标按下时才执行下面的代码。④重写鼠标释放函数,使鼠标释放后self.moveFlage=False。结束mouseMoveEvent(self, evt)重写的代码功能。

PyQt5-如何显示一个没有标题栏的顶层窗口
猜你喜欢