界面切换

Qt 多界面来回切换的问题以及Qt界面关闭与销毁         Qt 中我们经常会用到好几个界面,那么这几个界面之间来回切换就是一个经常出现的问题。之前我也总是被这个问题困扰,现在写一个样例程序当作一种解决方案,希望能给大家启发。       首先我定义了两个界面,一个主界面,一个是子界面,我希望它们两个能互相切换。主界面和子界面如图所示:子界面:       主要程序如下所示:       首先是主界面:在Mainwindow里面,当点击pu... 阅读详情

界面切换

界面切换

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QStackedLayout, QLabel, QPushButton


class One(QWidget):
    def __init__(self):
        super(One, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('第一个页面', self)
        label.move(50, 30)

        self.btn = QPushButton('下一页', self)
        self.btn.move(300, 300)


class Two(QWidget):
    def __init__(self):
        super(Two, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('第二个页面', self)
        label.move(50, 60)

        self.btn1 = QPushButton('下一页', self)
        self.btn1.move(300, 300)
        # btn1.clicked.connect(self.btnAction)

        self.btn2 = QPushButton('上一页', self)
        self.btn2.move(100, 300)


class Three(QWidget):
    def __init__(self):
        super(Three, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('第三个页面', self)
        label.move(50, 100)

        self.btn = QPushButton('上一页', self)
        self.btn.move(100, 300)


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.create_ui()
        self.setGeometry(200, 100, 800, 600)
        self.setWindowTitle('图书管理系统首页')
        self.show()

    def create_ui(self):
        self.stacked = QStackedLayout(self)

        one = One()
        two = Two()
        three = Three()

        one.btn.clicked.connect(self.next_action)
        two.btn1.clicked.connect(self.next_action)
        two.btn2.clicked.connect(self.pre_action)
        three.btn.clicked.connect(self.pre_action)

        self.stacked.addWidget(one)
        self.stacked.addWidget(two)
        self.stacked.addWidget(three)

    def next_action(self):
        index = self.stacked.currentIndex()
        # 切换页面
        self.stacked.setCurrentIndex(index+1)

    def pre_action(self):
        index = self.stacked.currentIndex()
        self.stacked.setCurrentIndex(index - 1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

部分切换(复杂)

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QStackedLayout, QPushButton, QLabel, QHBoxLayout


class One(QWidget):
    def __init__(self):
        super(One, self).__init__()
        self.create_ui()

    def create_ui(self):
        self.setStyleSheet('QWidget{background-color: red;}')
        label = QLabel('第一个页面', self)
        label.move(50, 30)

        self.btn = QPushButton('下一页', self)
        self.btn.move(300, 300)


class Two(QWidget):
    def __init__(self):
        super(Two, self).__init__()
        self.create_ui()

    def create_ui(self):
        self.setStyleSheet('QWidget{background-color: yellow;}')

        label = QLabel('第二个页面', self)
        label.move(50, 60)

        self.btn1 = QPushButton('下一页', self)
        self.btn1.move(300, 300)
        # btn1.clicked.connect(self.btnAction)

        self.btn2 = QPushButton('上一页', self)
        self.btn2.move(100, 300)


class Three(QWidget):
    def __init__(self):
        super(Three, self).__init__()
        self.create_ui()

    def create_ui(self):
        self.setStyleSheet('QWidget{background-color: blue;}')

        label = QLabel('第三个页面', self)
        label.move(50, 100)

        self.btn = QPushButton('上一页', self)
        self.btn.move(100, 300)


class TopView(QWidget):
    def __init__(self, stacked=QStackedLayout()):
        super(TopView, self).__init__()
        self.stacked = stacked
        self.create_ui()

    def create_ui(self):
        box = QHBoxLayout(self)

        self.btn1 = QPushButton('one', self)
        self.btn1.clicked.connect(self.change_page1)

        self.btn2 = QPushButton('two', self)
        self.btn2.clicked.connect(self.change_page2)

        self.btn3 = QPushButton('three', self)
        self.btn3.clicked.connect(self.change_page3)

        box.addWidget(self.btn1)
        box.addWidget(self.btn2)
        box.addWidget(self.btn3)
        box.addStretch(1)

    def change_page2(self):
        self.stacked.setCurrentIndex(1)

    def change_page1(self):
        self.stacked.setCurrentIndex(0)

    def change_page3(self):
        self.stacked.setCurrentIndex(2)


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.create_ui()
        self.setGeometry(200, 100, 800, 600)
        self.setWindowTitle('页面切换')
        self.show()

    def create_ui(self):
        # 1.整体盒子
        self.box = QVBoxLayout(self)

        # 2.1 顶部视图
        top_view = TopView()

        # 2.2 底部用来进行切换的Layout
        self.stacked = QStackedLayout()
        one = One()
        two = Two()
        three = Three()
        self.stacked.addWidget(one)
        self.stacked.addWidget(two)
        self.stacked.addWidget(three)

        top_view.stacked = self.stacked

        self.box.addWidget(top_view)
        self.box.addLayout(self.stacked)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

部分切换

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QStackedLayout, QPushButton, QLabel
from PyQt5.QtWidgets import QListWidget, QAction
from PyQt5 import QtWidgets


class One(QWidget):
    def __init__(self):
        super(One, self).__init__()
        self.create_ui()

    def create_ui(self):
        box = QHBoxLayout(self)

        left_box = QVBoxLayout()
        list_v = QListWidget(self)
        list_v.addItems(['释义', '例句'])     # 添加文字选项
        list_v.setCurrentRow(0)     # 设置默认选中
        list_v.currentItemChanged.connect(self.item_change)     # 关联切换事件
        left_box.addWidget(list_v)

        self.right_box = QStackedLayout()
        l1 = QLabel('释义的界面', self)
        l2 = QLabel('例句的界面', self)
        self.right_box.addWidget(l1)
        self.right_box.addWidget(l2)

        box.addLayout(left_box, 1)
        box.addLayout(self.right_box, 3)

    def item_change(self, value: QtWidgets.QListWidgetItem):
        print('改变:', value.text())
        if value.text() == '释义':
            self.right_box.setCurrentIndex(0)
        else:
            self.right_box.setCurrentIndex(1)







class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.create_ui()
        self.setGeometry(200, 100, 800, 600)
        self.setWindowTitle('图书管理系统首页')
        self.show()

    def create_ui(self):
        box = QVBoxLayout(self)

        # 1.顶部视图
        top_box = QHBoxLayout()
        btn1 = QPushButton('页面1', self)
        btn2 = QPushButton('页面2', self)
        btn3 = QPushButton('页面3', self)
        top_box.addWidget(btn1)
        top_box.addWidget(btn2)
        top_box.addWidget(btn3)

        btn1.clicked.connect(self.btn1_action)
        btn2.clicked.connect(self.btn2_action)
        btn3.clicked.connect(self.btn3_action)

        # 2.底部视图
        self.bottom_box = QStackedLayout()
        # label1 = QLabel('页面1', self)
        page1 = One()
        label2 = QLabel('页面2', self)
        label3 = QLabel('页面3', self)
        # self.bottom_box.addWidget(label1)
        self.bottom_box.addWidget(page1)
        self.bottom_box.addWidget(label2)
        self.bottom_box.addWidget(label3)

        box.addLayout(top_box)
        box.addLayout(self.bottom_box)

    def btn1_action(self):
        self.bottom_box.setCurrentIndex(0)

    def btn2_action(self):
        self.bottom_box.setCurrentIndex(1)

    def btn3_action(self):
        self.bottom_box.setCurrentIndex(2)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

发射信号:创建信号,接收(信号关联事件),发射信号

#1.创建信号-类属性
login_succee_signal = pyqtSignal(str, int)
#2.发射信号
self.login_succee_signal.emit(username, role)
#3.接收(信号关联事件)
self.login_page.login_succee_signal.connect(self.login_succeed)
# 关联的函数会获得相应的发射信号值
def login_succeed(self, username, role):
Qt的界面切换实现 Qt之界面切换创建主窗体模拟密码验证弹出下一个界面功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 创建主窗体 首先,建... 阅读详情

相关推荐

MFC做界面切换

1:首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1(Photo_Test),Button2(Video_Test),Button3(Camera_Test))放在对话框上。(主界面情况)2:往工程里添加3个类(CTestC,CTestP,CTestV),基类是CDialog. 3:在工程头文件(XXXXDlg.h)中包含每个子对话框类的头文件#include  "Te...

zhou的博客 1万+

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用

🚀 解锁PyQt5窗口布局的奥秘!🔍 想要精准控制PyQt5窗口位置和大小?`self.setGeometry()`来帮你!🌟 轻松设定初始位置与尺寸,让GUI界面更完美。通过代码示例,深入了解其强大功能。举一反三,探索更多布局可能。以小见大,掌握PyQt5布局精髓。读完本文,让你在GUI编程中如虎添翼!#PyQt5 #self.setGeometry #GUI编程 #窗口布局 #位置大小控制

创作高质量博文,分享知识,共同进步! 3114

MFC下界面切换

目的:MFC主对话框下选定一部分区域,要在这个区域上实现每个按钮对应一个画面     思想:1、先确定区域,可以采用static text 控件                2、将这部分区域作为容器,存放不同的界面,可以采用Cpropertysheet,添加page方法     实现:由于Cpropertysheet类所实现的是带有tab模式的界面切换,故重写Cpropertysheet类

Pnc_Logon的专栏 2523

QT

QT 一、最小系统 from PyQt5.QtWidgets importQApplication,QWidget import sys #1.创建应用程序对象 app=QApplication(sys.argv) #2.创建窗口 window=QWidget() #设置窗口的大小和位置 #setGeometry(x,y,w,h) window.setGeometry(200,100,800,600) #设置窗口标题 window.setWindowTitle('第一个窗口') #显示窗口 wind

weixin_54867910的博客 335

QT实战——界面切换

QT简单的实现按钮进行界面切换

weixin_44898655的博客 2995

七夕快到了,教你用python去表白!

# -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets from PyQt5.QtGui import QFont,QIcon#QtWidgets不包含QFont必须调用QtGui from PyQt5 import QtGui,QtCore import random class MessageBox(QtWidgets.QW...

lmseo5hy的博客 8985

【2】PyQt5系列教程(2)PyQt5的布局

PyQt5系列教程(2)PyQt5的布局

司徒荆的博客 883

基因家族的鉴定-基于Windows系统上的HMMER

基因家族的鉴定-基于Windows系统上的HMMER。

liangjinghui123的博客 3249

PyQt5学习笔记二----组件---窗口、控件

QIcon 图标控件,为每一个窗口设置一个特有的图标。 # -*- coding: utf-8 -*- from PyQt5.QtWidgets import QApplication,QWidget from PyQt5.QtGui import QIcon import sys #创建一个名为Icon的窗口,继承自QWidget class Icon(QWidget): de...

小蝈蝈的博客 727

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

软件,添加AR设备时启动异常,最开始错误代码是40,最后通过重新安装,又出现了新的问题,启动AR设备一直是0,而且界面卡住。打开控制面板→网络和Internet→网络和共享中心→更改适配器设置,然后再按以下步骤一次操作。重新打开eNsp,然后选择注册设备,注册成功后重新启动一下,这个时候AR设备就可以正常启动啦。打开eNsp→菜单→工具→选项→服务器设置,写入刚刚写的IP地址就可以了。打开VirtualBox,将左侧的文件全部删除(点击删除所有文件)

享你所想 3418

20个闭环渗透测试项目:从漏洞发现到简历突围

渗透测试不仅是工具使用,更是对系统设计缺陷与实现偏差的深度推演。理解OWASP Top 10、Burp Suite等基础能力只是起点,真正具备工程价值的是能复现、可验证、可协作的完整攻击链。本文聚焦真实业务场景下的SSRF协议绕过、JWT签名机制缺陷、Redis未授权利用、Kong网关配置风险及etcd存储结构分析等核心热词,揭示漏洞本质在于架构决策与配置偏差的叠加态。适用于红队实战、甲方安全建设与乙方渗透审计等多类岗位,帮助从业者将技术动作升维为技术叙事。

weixin_32234493的博客 415

linux命令切换界面,Linux图形界面与命令行界面切换

1、没有安装图形界面的Linux系统执行下面命令安装图形界面:yum groupinstall "GNOME Desktop" "Graphical Administration Tools"注:安装中间需要输入两次“y”确认安装2.安装完毕之后命令行界面—>图形界面执行startx命令3、图形界面—>命令行界面Ctrl+Alt+F24、 启动进入命令行修改/etc/inittab文件...

weixin_34186408的博客 1万+

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

LittlevGL 切换界面的演示

作为初学者都会遇到如何切换界面的问题,今天在这里就跟大家演示下如何切换界面。 其实 lvgl 切换界面不是很难,只需要下面几行代码即可实现: lv_obj_t* btn1,* btn2; lv_obj_t* current_app_obj_user=NULL; #define LV_DESKTOP lv_disp_get_scr_act(NULL) /******************...

yunjie167的专栏 1万+

数字 IC 笔试面试必考点(1)FPGA 芯片架构

FPGA 芯片架构是非常重要的,如果你不了解 FPGA 芯片内部的详细架构,那么...

新芯设计的博客 2809

数据预处理

数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。...

CJW的博客 9929

QT基础(五)之界面切换

QT基础(五)之界面切换 文章目录QT基础(五)之界面切换一、创建新的界面1.新建UI界面相关文件2.选择Widget模板3.修改UI名称4.点击完成,创建成功后界面如下:二、如何进行界面切换?1. on_loginBt_clicked()2. on_quitLoginBt_clicked() 一、创建新的界面 在进行界面切换之前,需要先创建一个新的界面。创建步骤如下。 1.新建UI界面相关文件 2.选择Widget模板 3.修改UI名称 4.点击完成,创建成功后界面如下: 二、如何进行界面切换?

NameisBoy的博客 8637

大数据分析案例-基于随机森林模型对北京房价进行预测

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬勃起来。同时,随着社会经济的快速开展,居民的经济条件越来越好,住房条件也在不断地提升。而住房是人民根本生活的保障,也是-一个家庭最重要的资产,从一定的层面.上反映了一个家庭整体的生活水王,多方面的因素使得房地产行业在短时间开展成为我国的支柱产业之一;成为了切实关乎人民生活和利益的重要产业。然而,随着房地产行业的开展,问题也慢慢突显出来,房价一直居高不下成为了一个大问题。 作为国家的支柱产业,房地产的稳定发展关乎国计民生。近几年,房

m0_64336780的博客 8827

QT之多个界面相互切换。。。。。。

柴鸡,听说你的QT界面只能单一显示,我笑出了八腹肌;接下来看大神怎么操作吧,上才艺。 QT大神武林宝典 切忌:一、该功法只适合18岁以上25岁以下,无妻无儿无负担的美男子; 二、欲练此功,亦先自宫;三、注意要看完。 1.QT界面...

m0_45243224的博客 1万+

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战

本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。

2201_76125261的博客 1189

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux做界面切换,linux两个界面之间的切换

鲁夫 于 2010-11-16 16:07:36发表:终于知道了!谢谢qqctk 于 2010-11-16 15:34:55发表:(e:e2swywrw0512 于 2010-11-01 17:03:56发表:是的,好,木头128 于 2010-10-04 19:45:13发表:学习了olderlong 于 2010-10-04 13:41:26发表:ALT+CTRL+Fn(n从1到6)...

weixin_32300981的博客 968

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

QT之一个UI里边多界面切换

VS中找到你的主窗口Ui文件,双击打开进入Designer 2.创新多个Ui文件 右键项目,添加新建项 Ui属性选择QWidget 主窗口.h 主窗口.cpp 效果展示:

yohnyang的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux如何切换图形界面和命令行界面

Linux如何切换图形界面和命令行界面 刚学习虚拟机的时候,第一步就是安装虚拟机。虚拟机的安装有界面版的和没有界面版的。一般不建议大家安装有界面版的,因为这样会极大的占用我们电脑的内存。如果不小心安装了有界面版的,该如何操作才能 进入到命令行界面呢?接下来,我们来看看怎么解决这个问题. 1.使用用户名和密码登录到Linux系统,点击“活动”—“终端”,打开终端工具。 2.在命令行,输入 init 3 命令,并按回车键执行,切换到命令行界面。 3.切换到命令行界面后,在界面上只显示一个闪烁的光标,按下

4万+

python实现界面自由切换_PyQt实现界面翻转切换效果

这篇文章主要为大家详细介绍了PyQt实现界面翻转切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下PyQt实现界面翻转切换效果是用qt的场景功能来实现的,用到了QGraphicsView,QGraphicsLinearLayout,QGraphicsWidget等有关qt场景的库。算是对qt场景的一个小小的尝试,涉及内容不深,程序效果并是随心所欲,需要去进一步的改善和提高。暂且先把代码贴在...

weixin_39569747的博客 1444

PyQt6的界面切换事件

可能,大家会根据前面的操作,继续点击圈选的按键,切换进第三个界面,但实际上并不会成功,右键点击“插入页”中的“在当前页之前”,切换进第三个界面,再加入一个TextLabel控件,名字“界面3”,点击保存。它既能作为独立控件显示分割线或装饰框,也可作为其他控件的容器,通过丰富的样式选项实现界面视觉分层。在代码中,我设置的按键一对应“界面一”,图中可以看到它的CurrentIndex的索引为0。点击圈选的按键,切换第二个界面加入一个TextLabel控件,名字“界面2”

dasatalan的博客 1526

关于中CentOS字符界面与图形界面的切换

在字符界面里通过Ctr+alt+[f7]切换到图形界面,或者startx命令进入; 在图形界面里通过Ctr+alt+[f1~f6]切换到文字界面。 可以在图形界面里通过/ect/inittab修改其中的 id:[0~6]:initdefault,将某种模式设置为开机默认模式。图形界面为5,字符界面为3。 分割线 ==================================...

BestQiang的博客 2万+
上一篇: 事件与页面切换
下一篇: 发送消息和QTableWidget
oklying
博客等级 码龄9年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值