顶层窗口相关
设置窗口图标:setWindowIcon(QIcon("resource/header_icon.png"))
获取窗口图标对象:windowIcon()
设置窗口标题:setWindowTitle("HelloWorld")
获取窗口标题:windowTitle()
设置不透明度:setWindowOpacity(float)
参数:0.0 ~ 1.0 数值越小,窗口背景越透明
获取不透明度:windowOpacity()
设置窗口状态:setWindowState(state)
参数:Qt.WindowNoState # 无状态
Qt.WindowMinimized # 最小化
Qt.WindowMaximized # 最大化
Qt.WindowFullScreen # 全屏
Qt.WindowActive # 激活当前窗口
获取窗口状态:windowState()
控制窗口显示状态: showFullScreen() # 全屏显示窗口,不包含窗口框架(标题栏)
showMaximized() # 最大化显示库存,包含窗口框架
showMinimized() # 最小化显示窗口,包含窗口框架
showNormal() # 显示标准大小窗口,包含窗口框架
判断窗口显示状态: isMinimized() # 是否是最小化窗口
isMaximized() # 是否是最大化窗口
isFullScreen() # 是否是全屏
设置窗口标志:window.setWindowFlags(Qt.WindowStaysOnTopHint)
窗口样式参数:
Qt.Widget # 默认。是一个窗口或者控件。
# 有父控件,就是一般控件。
# 没父控件,就是窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
Qt.Window # 是一个窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
Qt.Dialog # 是一个对话框窗口,有窗口边框和标题栏(图标、标题、问号、关闭)
Qt.Sheet # 是一个窗口或部件Macintosh表单
Qt.Drawer # 是一个窗口或部件Macintosh抽屉
Qt.Popup # 是一个弹出式顶层窗口,没有窗口边框和标题栏
Qt.Tool # 是一个工具窗口
Qt.ToolTip # 是一个提示窗口,没有标题栏和窗口边框
Qt.SplashScreen # 是一个欢迎窗口,是QSplashScreen构造函数的默认值
Qt.SubWindow # 是一个子窗口
顶层窗口外观标志参数:
Qt.MSWindowsFixedSizeDialogHint # 窗口无法调整大小
Qt.FramelessWindowHint # 窗口无边框
Qt.CustomizeWindowHint # 有边框但无标题栏和按钮,不能移动和拖动。
Qt.WindowTitleHint # 添加标题栏和一个不可用的关闭按钮
Qt.WindowSystemMenuHint # 添加系统目录和一个关闭按钮
Qt.WindowMaximizeButtonHint # 激活最大化和关闭按钮,禁止最小化按钮
Qt.WindowMinimizeButtonHint # 激活最小化和关闭按钮,禁止最大化按钮
Qt.WindowMinMaxButtonsHint # 激活最小化,最大化和关闭按钮
Qt.WindowCloseButtonHint # 添加一个关闭按钮
Qt.WindowContextHelpButtonHint # 添加问号和关闭按钮,同对话框
Qt.WindowStaysOnTopHint # 窗口始终处于顶层位置(QQ登录界面)
Qt.WindowStaysOnBottomHint # 窗口始终处于底层位置
获取窗口样式:windowFlags()
窗口标志样图
顶层窗口外观标志
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
w1 = QWidget()
w1.setWindowTitle('W1')
w2 = QWidget()
w2.setWindowTitle('W2')
# 设置窗口图标
img1 = "./images/logo1.jpg"
img2 = "./images/logo2.png"
img3 = "./images/logo3.ico"
# 创建QIcon对象,传入图片地址
icon = QIcon(img3)
# 设置窗口图标
window.setWindowIcon(icon)
# 获取窗口图标
print('windowIcon:',window.windowIcon())
# 设置窗口标题
window.setWindowTitle('窗口特定操作1')
# 获取窗口标题
print('windowTitle:',window.windowTitle())
# 设置窗口不透明度(0.0 ~ 1.0)
window.setWindowOpacity(0.8)
# 获取窗口不透明度
print('windowOpacity:',window.windowOpacity())
# w1.show()
# w2.show()
# window.show()
# 设置窗口状态
# window.setWindowState(Qt.WindowMaximized) # 窗口最大化
# window.setWindowState(Qt.WindowMinimized) # 窗口最小化
# window.setWindowState(Qt.WindowNoState) # 窗口无状态(正常大小)
# window.setWindowState(Qt.WindowFullScreen) # 窗口全屏(没有边框)Alt+F4可以关闭
# w2.setWindowState(Qt.WindowActive) # 激活当前窗口(选中当前窗口)
# 获取窗口当前状态
print('获取窗口状态1:',window.windowState() == Qt.WindowMaximized)
# 窗口显示状态
# window.showNormal() # 标准大小显示窗口
window.showMaximized() # 最大化显示窗口
# window.showMinimized() # 最小化显示窗口
# window.showFullScreen() # 全屏显示窗口
# 判断窗口状态
if window.isMaximized():
print('最大化显示窗口')
elif window.isMinimized():
print('最小化显示窗口')
elif window.isFullScreen():
print('全屏显示窗口')
else:
print('标准大小显示窗口')
print('获取窗口状态2:',window.windowState() == Qt.WindowMaximized)
sys.exit(app.exec_())
windowIcon:
windowTitle: 窗口特定操作1
windowOpacity: 0.8
获取窗口状态1: False
最大化显示窗口
获取窗口状态2: True
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(800, 300)
str = 'Qt.WindowStaysOnBottomHint'
window.setWindowTitle(str)
label = QLabel(window)
label.setStyleSheet('font-size:40px;')
label.move(10, 100)
label.setText(str)
# 窗口样式
window.setWindowFlags(Qt.Widget) # 默认。是一个窗口或者控件。
# window.setWindowFlags(Qt.Window) # 是一个窗口,有窗口边框和标题栏(图标、标题、最小化、最大化、关闭)
# window.setWindowFlags(Qt.Dialog) # 是一个对话框窗口,有窗口边框和标题栏(图标、标题、问号、关闭)
# window.setWindowFlags(Qt.Sheet) # 是一个窗口或部件Macintosh表单
# window.setWindowFlags(Qt.Drawer) # 是一个窗口或部件Macintosh抽屉
# window.setWindowFlags(Qt.Popup) # 是一个弹出式顶层窗口
# window.setWindowFlags(Qt.Tool) # 是一个工具窗口
# window.setWindowFlags(Qt.ToolTip) # 是一个提示窗口,没有标题栏和窗口边框
# window.setWindowFlags(Qt.SplashScreen) # 是一个欢迎窗口,是QSplashScreen构造函数的默认值
# window.setWindowFlags(Qt.SubWindow) # 是一个子窗口
# 顶层窗口外观标志
# window.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint) # 窗口无法调整大小
# window.setWindowFlags(Qt.FramelessWindowHint) # 窗口无边框
# window.setWindowFlags(Qt.CustomizeWindowHint) # 有边框但无标题栏和按钮,不能移动和拖动。
# window.setWindowFlags(Qt.WindowTitleHint) # 添加标题栏和一个不可用的关闭按钮
# window.setWindowFlags(Qt.WindowSystemMenuHint) # 添加系统目录和一个不可用的关闭按钮
# window.setWindowFlags(Qt.WindowMaximizeButtonHint) # 激活最大化,禁止最小化按钮和关闭按钮
# window.setWindowFlags(Qt.WindowMinimizeButtonHint) # 激活最小化,禁止最大化按钮和关闭按钮
# window.setWindowFlags(Qt.WindowMinMaxButtonsHint) # 激活最小化和最大化,禁止关闭按钮
# window.setWindowFlags(Qt.WindowCloseButtonHint) # 添加一个关闭按钮
# window.setWindowFlags(Qt.WindowContextHelpButtonHint) # 添加问号和不可用关闭按钮,同对话框
# window.setWindowFlags(Qt.WindowStaysOnTopHint) # 窗口始终处于顶层位置(QQ登录界面)
# window.setWindowFlags(Qt.WindowStaysOnBottomHint) # 窗口始终处于底层位置
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class MyWidge(QWidget):
def __init__(self):
super().__init__()
self.flag = False
def mousePressEvent(self, a0: QMouseEvent) -> None:
if a0.button() == Qt.LeftButton:
self.flag = True
self.mous_x = a0.x()
self.mous_y = a0.y()
def mouseMoveEvent(self, a0: QMouseEvent) -> None:
if self.flag:
move_x = a0.x() - self.mous_x
move_y = a0.y() - self.mous_y
self.move(self.x() + move_x, self.y() + move_y)
def mouseReleaseEvent(self, a0: QMouseEvent) -> None:
self.flag = False
app = QApplication(sys.argv)
window = MyWidge()
window.resize(500, 500)
window.setWindowTitle('窗口特定操作案例')
# 设置窗口无边框、标题栏
window.setWindowFlags(Qt.FramelessWindowHint)
# 设置窗口透明度
window.setWindowOpacity(0.8)
# 添加最小、最大、关闭按钮
btn_li = ['关闭', '最大化', '最小化']
btn_w = 80
btn_h = 40
top_h = 1
btn_close = QPushButton(window)
btn_close.resize(btn_w, btn_h)
btn_close.setText('关闭')
btn_max = QPushButton(window)
btn_max.resize(btn_w, btn_h)
btn_max.setText('最大化')
btn_min = QPushButton(window)
btn_min.resize(btn_w, btn_h)
btn_min.setText('最小化')
# 添加按钮移动方法
def btn_move():
btn_close_x = window.width() - btn_w
btn_close.move(btn_close_x, top_h)
btn_max_x = btn_close_x - btn_w
btn_max.move(btn_max_x, top_h)
btn_min_x = btn_max_x - btn_w
btn_min.move(btn_min_x, top_h)
# 调用移动方法,统一移动按钮
btn_move()
# 添加最大化按钮槽函数,根据窗口状态设置按钮操作
def max_normal():
if window.isMaximized():
window.showNormal()
btn_move()
btn_max.setText('最大化')
else:
window.showMaximized()
btn_move()
btn_max.setText('恢复')
# 给三个按钮的点击事件连接槽函数
btn_close.pressed.connect(window.close)
btn_max.pressed.connect(max_normal)
btn_min.pressed.connect(window.showMinimized)
window.show()
sys.exit(app.exec_())
# 案例:创建一个窗口
# 要求:
# 窗口无边框无标题栏
# 窗口半透明
# 自定义最小化、最大化、关闭按钮
# 支持拖拽用户区域移动窗口
from PyQt5.Qt import *
import sys
class MyWidge(QWidget):
def __init__(self):
super().__init__()
self.flag = False
self.resize(500, 500)
self.setWindowTitle('窗口特定操作案例')
# 设置窗口无边框、标题栏
self.setWindowFlags(Qt.FramelessWindowHint)
# 设置窗口透明度
self.setWindowOpacity(0.8)
self.func_add()
def func_add(self):
self.add_widge()
self.btn_move()
self.btn_xinh()
def add_widge(self):
# 添加最小、最大、关闭按钮
self.btn_w = 80
self.btn_h = 40
self.top_h = 1
btn_close = QPushButton(self)
self.btn_close = btn_close
btn_close.resize(self.btn_w, self.btn_h)
btn_close.setText('关闭')
btn_max = QPushButton(self)
self.btn_max = btn_max
btn_max.resize(self.btn_w, self.btn_h)
btn_max.setText('最大化')
btn_min = QPushButton(self)
self.btn_min = btn_min
btn_min.resize(self.btn_w, self.btn_h)
btn_min.setText('最小化')
# 添加按钮移动方法
def btn_move(self):
btn_close_x = self.width() - self.btn_w
self.btn_close.move(btn_close_x, self.top_h)
btn_max_x = btn_close_x - self.btn_w
self.btn_max.move(btn_max_x, self.top_h)
btn_min_x = btn_max_x - self.btn_w
self.btn_min.move(btn_min_x, self.top_h)
def btn_xinh(self):
# 添加最大化按钮槽函数,根据窗口状态设置按钮操作
def max_normal():
if self.isMaximized():
self.showNormal()
self.btn_move()
self.btn_max.setText('最大化')
else:
self.showMaximized()
self.btn_move()
self.btn_max.setText('恢复')
# 给三个按钮的点击事件连接槽函数
self.btn_close.pressed.connect(self.close)
self.btn_max.pressed.connect(max_normal)
self.btn_min.pressed.connect(self.showMinimized)
def mousePressEvent(self, a0: QMouseEvent) -> None:
if a0.button() == Qt.LeftButton:
self.flag = True
self.mous_x = a0.x()
self.mous_y = a0.y()
def mouseMoveEvent(self, a0: QMouseEvent) -> None:
if self.flag:
move_x = a0.x() - self.mous_x
move_y = a0.y() - self.mous_y
self.move(self.x() + move_x, self.y() + move_y)
def mouseReleaseEvent(self, a0: QMouseEvent) -> None:
self.flag = False
app = QApplication(sys.argv)
window = MyWidge()
window.show()
sys.exit(app.exec_())