作一个窗体想让它总在最前或半透明窗体或可拖动,百度了下,就一行代码就实现了,确实比VC++实现的简单的多,顺便就一起写了一小段代码,对PYQT常用的几个窗体形态都用代码试了下,总结到一个窗体代码中,供初学小白要用时借签,代码中引用了一2.GIF动画,可自行找到一个GIF文件改名成2.gif后放在PY代码文件同一目录中即可。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtCore
class AlwaysOnTopWindow(QMainWindow):
def __init__(self):
super().__init__()
self.is_dragging=False #定义窗体是否可整体被拖动开关
self.setWindowTitle("总在最顶端的窗体类型示例")
#self.resize(600,800) #设置了固定尺寸之后,尺寸便不可修改!
self.setGeometry(300,100,600,800)
# 创建按纽控件
button01 = QPushButton('最顶端,无标题栏', self)
button01.setGeometry(50,350,150,50)
button01.clicked.connect(self.btnClick01) # 当按钮被点击时,调用 btnClick01方法
button02 = QPushButton('最顶端,有标题栏和关闭按纽', self)
button02.setGeometry(250,350,250,50)
button02.clicked.connect(self.btnClick02) # 当按钮被点击时,调用 btnClick02方法
button03 = QPushButton('最顶端,有标题栏和关闭按纽+最小化按纽', self)
button03.setGeometry(50,450,350,50)
button03.clicked.connect(self.btnClick03) # 当按钮被点击时,调用 btnClick03方法
button04 = QPushButton('恢复初始值', self)
button04.setGeometry(50,550,150,50)
button04.clicked.connect(self.btnClick04) # 当按钮被点击时,调用 btnClick04方法
button05 = QPushButton('设置为半透明窗体', self)
button05.setGeometry(250,550,200,50)
button05.setToolTip('透明度为0-1,o为全透明,1为不透明')
button05.clicked.connect(self.btnClick05) # 当按钮被点击时,调用btnClick05方法
button06 = QRadioButton('窗体可整体拖动',self)
button06.setGeometry(50,250,200,50)
button06.clicked.connect(self.btnClick06) # 当按钮被点击时,调用 btnClick06方法
button07 = QRadioButton('窗体不可整体拖动',self)
button07.setGeometry(280,250,250,50)
button07.clicked.connect(self.btnClick07) # 当按钮被点击时,调用 btnClick07方法
button08 = QPushButton('退出', self)
button08.setGeometry(250,650,100,50)
button08.clicked.connect(self.btnClick08) # 当按钮被点击时,调用btnClick08方法
self.oldflags = self.windowFlags() #保存当前最初的窗体状态以便恢复
#self.setWindowFlags(oldflags | Qt.WindowStaysOnTopHint ) #示例:在原有窗体类型基础上增加一个最顶端的属性
#self.setWindowFlags(Qt.Dialog | Qt.Tool | Qt.WindowStaysOnTopHint| Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint) #重新设置窗口属性
#self.setWindowFlags(Qt.Dialog | Qt.Tool | Qt.WindowStaysOnTopHint) #会有一个关闭按纽
self.setFixedSize(self.width(), self.height()) # 固定窗体大小
self.setFocusPolicy(Qt.NoFocus)
self.label=QLabel("",self)
self.movie=QMovie('2.gif')
self.label.setGeometry(10,50,200,80)
self.label.setMovie(self.movie)
self.movie.start()
# 重写此方法但不调用父类实现,防止最小化
#def focusOutEvent(self, event):
# pass
def btnClick01(self):
self.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.FramelessWindowHint)
self.show()
def btnClick02(self):
self.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.WindowCloseButtonHint)
self.show()
def btnClick03(self):
self.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.WindowCloseButtonHint|Qt.WindowMinimizeButtonHint)
self.show()
def btnClick04(self):
self.setWindowFlags(self.oldflags)
self.show()
def btnClick05(self):
self.setWindowOpacity(0.2)
def btnClick06(self):
self.is_dragging=True
def btnClick07(self):
self.is_dragging=False
def btnClick08(self):
self.movie.stop()
super(self).close() #调用父类close()
self.close() #关不了?只能加上面一句,否则窗体好象一直运行着,并没有close()
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
if self.is_dragging:
self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
event.accept()
def mouseMoveEvent(self, event):
if self.is_dragging:
self.move(event.globalPos() - self.drag_position)
event.accept()
def mouseReleaseEvent(self, event):
if self.is_dragging and event.button() == Qt.LeftButton:
#self.is_dragging = False
event.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = AlwaysOnTopWindow()
window.show()
sys.exit(app.exec())