【PyQt】切换界面的实现

news2024/11/14 13:55:13

  • 前言
  • 一、介绍
  • 二、代码
    • 2.1 QStackedWidget
      • 2.1.1 代码
      • 2.1.2 运行结果展示
    • 2.2 QTabWidget
      • 2.2.1 代码
      • 2.2.2 运行结果展示
    • 2.3 QDockWidget
      • 2.3.1 代码
      • 2.3.2 运行结果展示
  • PULSE
    • 结果
  • 总结


前言

实现几个界面的切换展示的效果。


一、介绍

在 PyQt 中实现一个主界面包含其他子界面的操作,通常可以通过多种方式来完成,比如使用 QStackedWidgetQTabWidgetQDockWidget 或简单地通过改变中央控件(central widget)来实现。

二、代码

2.1 QStackedWidget

QStackedWidget 提供了一个堆栈的方式来管理多个窗口部件(widgets),但一次只能显示一个。这非常适合于实现向导界面或者选项卡式界面,但不想显示选项卡本身时。

2.1.1 代码

'''
#Author :总要写点什么
#Creattime:2024/8/24
#FileName:51-Qwidgets
#Description: 网上抄的代码
'''
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QPushButton, QVBoxLayout, QWidget


class MainWindow ( QMainWindow ) :
    def __init__(self) :
        super ().__init__ ()

        # 创建 QStackedWidget
        self.stackedWidget = QStackedWidget()

        # 添加几个子界面
        self.page1 = QWidget ()
        self.page1Layout = QVBoxLayout ()
        self.page1Button = QPushButton ( "去到Page 2" )
        self.page1Layout.addWidget ( self.page1Button )
        self.page1.setLayout ( self.page1Layout )

        self.page2 = QWidget ()
        self.page2Layout = QVBoxLayout ()
        self.page2Button = QPushButton ( "去到Page 1" )
        self.page2Layout.addWidget(self.page2Button )
        self.page2.setLayout(self.page2Layout )

        # 槽函数
        self.page2Button.clicked.connect ( self.go_to_page_1 )
        self.page1Button.clicked.connect ( self.go_to_page_2 )

        # 将子界面添加到 QStackedWidget
        self.stackedWidget.addWidget ( self.page1 )
        self.stackedWidget.addWidget ( self.page2 )

        # 设置主窗口的中央控件为 QStackedWidget
        self.setCentralWidget ( self.stackedWidget )

    def go_to_page_1(self) :
        self.stackedWidget.setCurrentIndex(0)

    def go_to_page_2(self) :
        self.stackedWidget.setCurrentIndex(1)

if __name__ == '__main__':
    app = QApplication ( [] )
    window = MainWindow ()
    window.show ()
    app.exec_()

2.1.2 运行结果展示

主界面
在这里插入图片描述
也就是setCurrentIndex(0),从0开始没毛病。
点击按钮切换到setCurrentIndex(1)
在这里插入图片描述

2.2 QTabWidget

2.2.1 代码

from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel


class MainWindow ( QMainWindow ) :
    def __init__(self) :
        super ().__init__ ()

        # 设置窗口标题和大小
        self.setWindowTitle ( "QTabWidget 示例" )
        self.setGeometry ( 100, 100, 400, 300 )

        # 创建 QTabWidget
        self.tabWidget = QTabWidget ( self )
        self.setCentralWidget ( self.tabWidget )

        # 创建第一个选项卡
        self.tab1 = QWidget ()
        self.tab1Layout = QVBoxLayout ()
        self.label1 = QLabel ( "这是第一个选项卡", self.tab1 )
        self.tab1Layout.addWidget ( self.label1 )
        self.tab1.setLayout ( self.tab1Layout )
        self.tabWidget.addTab ( self.tab1, "选项卡 1" )

        # 创建第二个选项卡
        self.tab2 = QWidget ()
        self.tab2Layout = QVBoxLayout ()
        self.label2 = QLabel ( "这是第二个选项卡", self.tab2 )
        self.tab2Layout.addWidget ( self.label2 )
        self.tab2.setLayout ( self.tab2Layout )
        self.tabWidget.addTab ( self.tab2, "选项卡 2" )


if __name__ == '__main__':
    app = QApplication ( [] )
    window = MainWindow ()
    window.show ()
    app.exec_ ()

2.2.2 运行结果展示

选项1
在这里插入图片描述

选项2
在这里插入图片描述

2.3 QDockWidget

2.3.1 代码

'''
#Author :susocool
#Creattime:2024/8/26
#FileName:53-QDockWidget 示例
#Description:
'''
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QDockWidget, QVBoxLayout, QWidget


class MainWindow ( QMainWindow ) :
    def __init__(self) :
        super ().__init__ ()

        # 设置窗口标题和大小
        self.setWindowTitle ( "QDockWidget 示例" )
        self.setGeometry ( 100, 100, 800, 600 )

        # 创建两个 QTextEdit 控件作为停靠窗口的内容
        self.textEdit1 = QTextEdit()
        self.textEdit2 = QTextEdit()

        # 创建 QDockWidget 控件并设置其标题和内容
        self.dock1 = QDockWidget ( "停靠窗口 1", self )
        self.dock1.setWidget ( self.textEdit1 )

        self.dock2 = QDockWidget ( "停靠窗口 2", self )
        self.dock2.setWidget ( self.textEdit2 )

        # 将停靠窗口添加到主窗口
        # 默认情况下,停靠窗口会停靠在主窗口的左侧,但你可以通过 addDockWidget 的参数来改变它的位置
        self.addDockWidget ( Qt.LeftDockWidgetArea, self.dock1 )
        self.addDockWidget ( Qt.RightDockWidgetArea, self.dock2 )



if __name__ == '__main__':
    app = QApplication ( [] )
    window = MainWindow ()
    window.show ()
    app.exec_ ()


2.3.2 运行结果展示

在这里插入图片描述

PULSE

'''
#Author :susocool
#Creattime:2024/8/26
#FileName:乱写的切换界面
#Description:综合使用一下,以后使用参考这个来
'''
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QVBoxLayout, QDialog,QLabel,QTextEdit, QDockWidget
from PyQt5.QtCore import Qt  
  
class MainWindow(QMainWindow):  
    def __init__(self):  
        super().__init__()  
  
        # 设置窗口标题和大小  
        self.setWindowTitle("主界面")  
        self.setGeometry(100, 100, 400, 300)  
  
        # 创建一个中心小部件,用于放置按钮  
        central_widget = QWidget(self)  
        self.setCentralWidget(central_widget)  
  
        # 创建一个垂直布局  
        layout = QVBoxLayout(central_widget)  
  
        # 创建并添加按钮  
        self.button1 = QPushButton("打开新窗口 1", self)  
        self.button1.clicked.connect(self.open_new_window)  
        layout.addWidget(self.button1)

        self.button2 = QPushButton ( "打开新窗口 2", self )
        self.button2.clicked.connect ( self.open_2_window )
        layout.addWidget ( self.button2 )

        # 你可以根据需要添加更多的按钮  
  
    def open_new_window(self):
        dialog = NewWindowDialog(self)  
        dialog.show()


    def open_2_window(self):
        dialogwindos = QDockMainWindow(self)
        dialogwindos.show()

  
class NewWindowDialog(QDialog):  
    def __init__(self, parent=None):  
        super().__init__(parent)  
  
        # 设置窗口标题和大小  
        self.setWindowTitle("新窗口")  
        self.setGeometry(100, 100, 300, 200)  

        self.label = QLabel("这是一个新窗口", self)  
        self.label.move(50, 50)  # 简单地使用move来放置控件(注意:这不是最佳实践)  

        # QDialog 默认就支持窗口支持最小化和关闭等基本操作,因为它继承自 QWidget

class QDockMainWindow ( QMainWindow ) :
    def __init__(self, parent=None) :
        super(QDockMainWindow, self).__init__(parent)

        # 设置窗口标题和大小
        self.setWindowTitle ( "QDockWidget 示例" )
        self.setGeometry ( 100, 100, 800, 600 )

        # 创建两个 QTextEdit 控件作为停靠窗口的内容
        self.textEdit1 = QTextEdit()
        self.textEdit2 = QTextEdit()

        # 创建 QDockWidget 控件并设置其标题和内容
        self.dock1 = QDockWidget ( "停靠窗口 1", self )
        self.dock1.setWidget ( self.textEdit1 )

        self.dock2 = QDockWidget ( "停靠窗口 2", self )
        self.dock2.setWidget ( self.textEdit2 )

        # 将停靠窗口添加到主窗口
        # 默认情况下,停靠窗口会停靠在主窗口的左侧,但你可以通过 addDockWidget 的参数来改变它的位置
        self.addDockWidget ( Qt.LeftDockWidgetArea, self.dock1 )
        self.addDockWidget ( Qt.RightDockWidgetArea, self.dock2 )

if __name__ == '__main__':
    app = QApplication([])  
    window = MainWindow()  
    window.show()  
    app.exec_()

结果

在这里插入图片描述
点击按钮的结果

在这里插入图片描述


总结

这篇文章依旧没有总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

#mark# ViteSvgIconsPlugin svgoOptions选项

svgoOptions 设置为false时 , 矢量svg图标 stroke线条不正常 找了半天 哪影响的 , 线条异常图如下 svgoOptions 改为true后 ,显示正常了

并查集优化策略及其正确性证明:基于路径压缩与按秩合并

并查集优化策略及其正确性证明:基于路径压缩与按秩合并 前言优化策略算法伪代码C语言实现归纳法证明基础情况归纳步骤结论前言 引理:对于所有的结点x, 有 x.rank≤x.p.rank, 如 果x≠x.p, 则此式是严格不等 式。x.rank 的初始值为0,并且随时间而增加,直到x≠x.p; 从此以后,…

安卓13 背光反向 亮度反向 android13 backlight reverse

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 有些设备,在调整背光的时候,会发现,背光调大,显示亮度反而变暗,背光调小,亮度变亮。这是由于PWM背光本身并没有一个标准去决定怎么样算是高亮度,怎么算是低亮度。因…

C语言-02 算法-程序的灵魂

算法-程序的灵魂 1、程序=算法数据结构2、什么是算法3、简单的算法举例4、算法的特性5、怎样表示一个算法5.1 用自然语言表示算法5.2 用流程图表示算法5.3 三种基本结构和改进的流程图5.4 用N-S流程图表示算法5.5 用伪代码表示算法5.6 用计算机语言表示算法 6、结构…

秋冬春夏,纪念在CSDN的第365天

目录 时光 收获 工作 生活 憧憬 时光 再次收到创作纪念日的消息时,已在CSDN创作和度过了一年的时光。创作,成了自己的第二工作空间,成为了日常的一种习惯。 每当看到第1篇文章的提醒消息,都会想起当时创作的初衷和情景。是一…

学了PMP能给我们带来什么变化?

一、PMP是什么 PMP(Project Management Professional)是一个在项目管理领域具有高级认证的资格。该认证由PMI在全球200多个国家和地区广泛推广,被认为是项目管理领域内最具含金量的认证之一。 持有PMP证书的项目经理不仅可以提升其项目管理能力,同时也…

LLaMA代码笔记 --基于lit-llama

代码来自:lit-llama modelscope模型下载 :llama-7b 下载后的模型需要转换为lit-llama使用的格式,详见 howto 文件夹下的 download_weights.md 文中代码为了方便说明,删减了一些内容,详细代码请查看源码。 generate …

磁场强度H和磁感应强度B,磁化强度M和磁极化强度J

磁场强度H、磁感应强度B、磁化强度M和磁极化强度J是四个非常重要的磁学基本概念,他们之间关联但有时又很容易混淆。分清这四个概念对于磁材行业从业者是非常重要的,今天我们就为大家细说一下它们的概念和关系。 磁场强度H 磁场强度H其实是一个没有实际…

自动化巨头施耐德电气,部分业务被其供应商收购:之前还收购过霍尼韦尔

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 供应商逆袭:小鱼吃大鱼的商业奇迹 英国电气行业掀起一阵惊涛骇浪。斯塔福德郡的中型企业Goodfish Group竟然收购了全球巨头施耐德电气…

AppInventor2 现已全面支持安卓14!

//重磅升级:支持安卓14// MIT于2024/08/19升级Android SDK至34(安卓14),因为在 2024 年 8 月 31 日之后,在 Google Play 商店中添加或更新应用时必须执行此更新。 国内估计也会跟进,因此使用最新版本的 s…

CleanMyMac如何帮助用户清空DNS缓存,Mac清除dns缓存命令

什么是DNS缓存?这个缓存有什么危害?相信大家平时使用浏览器时,有时候会遇到一个很奇怪的问题,就是Mac打开许多网站如百度网站,都是可以访问的,但是在打开某个特定网站时,却发现浏览器提示检测不…

网上商城|基于SprinBoot+vue的分布式架构网上商城系统(源码+数据库+文档)

分布式架构网上商城系统 目录 基于SprinBootvue的分布式架构网上商城系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能模块 5.2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…

Halcon根据灰度特征值选择区域

Halcon根据灰度特征值选择区域 与select_shape算子类似,灰度值图像也可以快捷地根据特征值选择符合设定条件的区域。select_gray算子用于实现这一功能,该算子能接受一组区域作为输入,然后根据选定的特征计算其是否满足特定的条件。当所有区域…

网络安全 DVWA通关指南 DVWA File Upload(文件上传)

DVWA File Upload(文件上传) 文章目录 DVWA File Upload(文件上传)修复建议 LowMediumHighImpossible 修复建议 1、使用白名单限制可以上传的文件扩展名 2、注意0x00截断攻击(PHP更新到最新版本) 3、对上传…

【系统安全】Kernel Streaming WOW Thunk 服务驱动程序特权提升漏洞(CVE-2024-38054)

文章目录 前言一、漏洞概述二、影响范围三、漏洞复现四、修复方法前言 安全研究员 “Frost” 发布了CVE-2024-38054漏洞的概念验证漏洞利用代码,这加剧了人们对最近修补的 Windows 安全漏洞的担忧。内核流 WOW Thunk 服务驱动程序中的这个高严重性漏洞可能使本地攻击者能够通…

【赵渝强老师】使用Docker Machine远程管理Docker

Docker Machine是Docker官方提供的一个远程管理工具。通过使用Docker Machine,可以帮助开发人员在远程主机上安装Docker;或者在远程的虚拟主机上直接安装虚拟机并在虚拟机中安装Docker。Docker Machine还提供了相应的命令来管理这些远程的Docker环境和虚…

四川财谷通信息技术有限公司引领新风尚

在数字经济蓬勃发展的今天,电子商务已成为推动经济增长的重要引擎之一。而在这股浪潮中,短视频平台抖音凭借其庞大的用户基数和高度活跃的社区氛围,为无数小微企业和个人创业者提供了前所未有的发展机遇。四川财谷通信息技术有限公司&#xf…

如何防止图纸外泄?图纸安全管理措施有哪些(必备清单)

当今数字化和信息化的时代,图纸作为企业设计、制造等环节中的重要资料,其安全性尤为重要。图纸的泄露不仅可能导致企业的技术秘密被竞争对手获取,还可能造成巨大的经济损失和法律纠纷。因此,建立健全的图纸安全管理措施是每个企业…

虚幻5|音效设置—环境音效,低血量和恢复血量音效,音效衰减,脚步音效

一,环境音效——学习使用SoundCue 1.打开主界面 拖入一个环境音效 2.选择一个音效,但这个音效围绕整个环境的,设置听听就行了 听完后删掉,我们要设置一个有一定范围的音效 3.找到存放音效的文件,创建一个音频SoundC…

【机器学习西瓜书学习笔记——强化学习】

机器学习西瓜书学习笔记【第十六章】 第十六章 强化学习16.1 任务与奖赏四种主要的机器学习方式马尔可夫决策过程 16.2 K K K-摇臂赌博机探索与利用$\epsilon $-贪心 S o f t m a x Softmax Softmax 16.3 有模型学习策略评估策略改进策略迭代与值迭代 16.4 免模型学习蒙特卡罗…