网站支付页面怎么做的,中国各省旅游网站建设分析,企业网站怎么制作,东莞中企动力做网站✨✨ 欢迎大家来到景天科技苑✨✨
#x1f388;#x1f388; 养成好习惯#xff0c;先赞后看哦~#x1f388;#x1f388; #x1f3c6; 作者简介#xff1a;景天科技苑 #x1f3c6;《头衔》#xff1a;大厂架构师#xff0c;华为云开发者社区专家博主#xff0c;…
✨✨ 欢迎大家来到景天科技苑✨✨ 养成好习惯先赞后看哦~ 作者简介景天科技苑 《头衔》大厂架构师华为云开发者社区专家博主阿里云开发者社区专家博主CSDN全栈领域优质创作者掘金优秀博主51CTO博客专家等。 《博客》Python全栈前后端开发小程序开发云原生K8S人工智能js逆向App逆向网络系统安全数据分析PyQt5tkinterDjangofastapiflask等框架linuxshell脚本等实操经验网站搭建数据库等分享。 所属的专栏PyQt5桌面应用开发零基础到进阶应用实战 景天的主页景天科技苑 文章目录 顶层窗口1.主窗口与顶层窗口的区别2.顶层窗口API详解与实战1设置窗口图标2设置窗口标题3设置窗口不透明度4窗口状态5窗口最大化与最小化6窗口标志7顶层窗口综合案例实战 顶层窗口
顶层窗口——就是当前响应的窗口,非顶层窗口就是灰色的,不响应的窗口。当一个窗口没有父对象该窗口就是顶层窗口有关顶层窗口的相关操作也是我们开发过程中经常遇到的今天我们就有关顶层窗口的操作详细展开说说。
1.主窗口与顶层窗口的区别
主窗口永远只有1个 非主窗口可有多个 顶层窗口也只有1个但他们是不是顶层窗口得看当前执行的窗口是否在最上面所有窗口的上面。 就是主窗口的建立代表应用程序的开始主窗口的关闭代表应用程序的结束。而顶层窗口只是显示在最上面覆盖其他窗口但却没有其他窗口能够挡住它
首先一个应用程序可以有许多窗口但主窗口只有一个而顶层窗口其实也只有一个但却可以是不同名字的窗口。 举个例子 我创建了3个窗口窗口1、2和3。其中窗口1是主窗口。是这个应用程序的根本。当我运行该程序时窗口1立即出现此时它就是顶层窗口 在运行程序期间我利用某些方法例如点击鼠标或按键盘可以打开第二个窗口此时主窗口仍然是窗口1而顶层窗口却改为窗口2了。 我又打开了一个窗口此时主窗口仍然是窗口1而顶层窗口又变成窗口3了窗口2什么也不是。 当我关闭窗口3时窗口2成为顶层窗口当然我们可以用一定的方法不这么做窗口1还是主窗口。 当我关闭窗口2时窗口1成为顶层窗口同时也是主窗口。 但是如果我没有关闭窗口2和3而是立即关闭窗口1如果可以的话但一般我们都阻止用户这么做必须让他们先关掉其他窗口再关主窗口那么程序就会停止。另外两个窗口也会随即关闭。一般应用程序都是这么设计的。 简言之就是主窗口的建立代表应用程序的开始主窗口的关闭代表应用程序的结束。而顶层窗口只是显示在最上面覆盖其他窗口但却没有其他窗口能够挡住它
2.顶层窗口API详解与实战
1设置窗口图标
setWindowIcon setWindowIcon 是 QWidget以及它的子类的一个方法用于设置窗口的图标。这个图标通常显示在窗口的左上角以及当窗口最小化时显示在任务栏中。 使用方法如下 QIcon可以传参类型
setWindowIcon(QIcon(resource/header_icon.png))设置窗口图标代码实战
# 0. 导入需要的包和模块
from PyQt5.Qt import * # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window QWidget()# 2.2 设置控件
#设置窗口标题默认标题是python只有顶级控件才可以设置标题栏的标题
window.setWindowTitle(设置窗口图标)
#设置窗口大小注意设置的空间尺寸大小不包含上面的标题栏
window.resize(500, 500)#创建图标对象,参数是图片
icon QIcon(../imgs/python-gui.png)#设置图标
window.setWindowIcon(icon)# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())运行查看窗口图标已变成我们设置的图片样式
2设置窗口标题
这个之前我们多次使用了略
3设置窗口不透明度
在PyQt5中如果我们希望将窗体设置为透明并保持其中的某些控件不透明我们可以通过设置窗体的样式表和控件的样式表来实现。 我们可以使用setOpacity()函数来设置QWidget控件的不透明度。此函数将控件背景设置为一种半透明颜色其不透明度由参数值指定。 setWindowOpacity(float) #参数从1.0 到0.0 从不透明到透明 windowOpacity() 获取不透明度的值
设置窗口不透明度代码实战
# 0. 导入需要的包和模块
from PyQt5.Qt import * # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window QWidget()# 2.2 设置控件
#设置窗口标题默认标题是python只有顶级控件才可以设置标题栏的标题
window.setWindowTitle(窗口透明度)
#设置窗口大小注意设置的空间尺寸大小不包含上面的标题栏
window.resize(500, 500)#设置窗口不透明度
#1是最不透明
window.setWindowOpacity(1)# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())最不透明值为1
0完全透明啥也看不见了
其他值都介于完全透明和不透明之间
获取透明度值
#获取不透明度值
print(window.windowOpacity())4窗口状态
PyQt5中设置窗口状态的方法和相关函数。窗口的显示状态即最大化最小化全屏无状态活动窗口等形式。
设置窗口状态
#设置窗口无状态默认就是该状态
# window.setWindowState(Qt.WindowNoState)设置窗口最小化
#设置窗口最小化 相当于点击窗口最小化按钮程序隐藏到任务栏
window.setWindowState(Qt.WindowMinimized)设置窗口最大化
#设置窗口最大化 相当于点击窗口最大化按钮程序最大化占满整个屏幕
window.setWindowState(Qt.WindowMaximized)设置窗口全屏
#设置窗口全屏标题栏都看不到了
window.setWindowState(Qt.WindowFullScreen)设置活跃窗口
#设置活动窗口 当桌面有多个窗口能操作的窗口称之为活动窗口
window.setWindowState(Qt.WindowActive)默认情况下是谁后展示谁显示到前面
我们也可以通过setWindowState(Qt.WindowActive)来人为控制哪个窗口时活跃窗口 window.show() window2 QWidget() window2.setWindowTitle(“第二个窗口”) window2.show()
#设置活动窗口 当桌面有多个窗口能操作的窗口称之为活动窗口在每个窗口show之后设置 window.setWindowState(Qt.WindowActive)
获取窗口状态 可以判断窗口处于什么状态
#获取窗口状态
print(window.windowState() Qt.WindowNoState)5窗口最大化与最小化
上面通过窗口状态设置窗口最大化与最小化之等方式一般不是直接用常常用于我们关闭了窗口自带的标题栏自己创建一些按钮来实现最大化最小化的操作 自带的窗口标题栏最大化最小化操作一般是通过如下一些API可以设置或者判断
#将窗口最大化显示
# window.showMaximized()#将窗口最小化展示
# window.showMinimized()#将窗口正常展示
# window.showNormal()#将窗口全屏化展示
window.showFullScreen()6窗口标志
窗口标志的主要作用就是为了设置整个窗口的外观
设置窗口标志的方法 我们可以通过以下方法来设置窗口标志
创建对象时候直接设置flags的值
通过函数setWindowFlags()设置
setWindowFlags()根据传参不同设置的窗口外观不同 窗口样式参数
顶层窗口外观标志
无边框窗口代码实战
# 0. 导入需要的包和模块
from PyQt5.Qt import * # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window QWidget()# 2.2 设置控件
#设置窗口标题默认标题是python只有顶级控件才可以设置标题栏的标题
window.setWindowTitle(窗口标志)
#设置窗口大小注意设置的空间尺寸大小不包含上面的标题栏
window.resize(500, 500)#设置窗口标志
#设置窗口无边框,这样窗口就没有标题栏了
window.setWindowFlags(Qt.FramelessWindowHint)# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())此时的窗口就全死用户区域不再有标题栏
7顶层窗口综合案例实战
创建一个窗口 要求 无边框无标题栏 窗口半透明 自定义最小化最大化关闭按钮 支持拖拽用户区移动窗口
代码
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sysclass Window(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.setWindowFlags(Qt.FramelessWindowHint)self.setWindowOpacity(0.9)# 2.2 设置控件self.setWindowTitle(顶层窗口操作-案例)self.resize(500, 500)#鼠标按下标志位self.move_flag False# 公共数据self.top_margin 10self.btn_w 80self.btn_h 30self.setup_ui()def setup_ui(self):# 添加三个子控件 - 窗口的右上角close_btn QPushButton(self)self.close_btn close_btnclose_btn.setText(关闭)close_btn.resize(self.btn_w, self.btn_h)max_btn QPushButton(self)self.max_btn max_btnmax_btn.setText(最大化)max_btn.resize(self.btn_w, self.btn_h)mini_btn QPushButton(self)self.mini_btn mini_btnmini_btn.setText(最小化)mini_btn.resize(self.btn_w, self.btn_h)#点击关闭按钮将窗口关闭close_btn.pressed.connect(self.close)def max_normal():if self.isMaximized():self.showNormal()max_btn.setText(最大化)else:self.showMaximized()max_btn.setText(恢复)#构建信号与槽点击最大化最小化实现功能max_btn.pressed.connect(max_normal)mini_btn.pressed.connect(self.showMinimized)def resizeEvent(self, QResizeEvent):#计算自定义的按钮位置print(窗口大小发生了改变)# close_btn_w btn_wwindow_w self.width()close_btn_x window_w - self.btn_wclose_btn_y self.top_marginself.close_btn.move(close_btn_x, close_btn_y)max_btn_x close_btn_x - self.btn_wmax_btn_y self.top_marginself.max_btn.move(max_btn_x, max_btn_y)mini_btn_x max_btn_x - self.btn_wmini_btn_y self.top_marginself.mini_btn.move(mini_btn_x, mini_btn_y)def mousePressEvent(self, evt):# 判定点击的是否是鼠标左键# 在此处设计一个标记, 用作判定是否需要移动# 一个就是窗口的原始坐标# 鼠标按下的点#只有鼠标左键被按下才执行if evt.button() Qt.LeftButton:self.move_flag Trueprint(鼠标按下了)#确定鼠标按下时的坐标点self.mouse_x evt.globalX()self.mouse_y evt.globalY()print(鼠标初始坐标点,self.mouse_x,self.mouse_y)#窗口初始坐标self.origin_x self.x()self.origin_y self.y()def mouseMoveEvent(self, evt):# if 窗口的移动标记 True:# 根据鼠标按下的点 计算移动向量# 根据移动向量, 和窗口的原始坐标 最新坐标# 移动整个窗口的位置if self.move_flag:print(鼠标移动了)#鼠标移动的实时位置计算移动向量move_x evt.globalX() - self.mouse_xmove_y evt.globalY() - self.mouse_y#窗口最终要移动向量dest_x self.origin_x move_xdest_y self.origin_y move_y#设置窗口移动self.move(dest_x,dest_y)def mouseReleaseEvent(self, QMouseEvent):# 把这个标记, 进行重置 Falseprint(鼠标松开了)# 松开鼠标左键恢复标志位为Falseself.move_flag False# 1. 创建一个应用程序对象
app QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件正常普通窗口可以通过如下方式设置无边框
# window QWidget(flagsQt.FramelessWindowHint)
window Window()# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())运行
点击最大化最小化关闭功能都已实现
在窗口按住鼠标左键移动窗口也可以移动