当前位置: 首页 > news >正文

入门 PyQt6 看过来(案例)16~ 竖状菜单

本文依照上一篇文章进行简单的拓展,做一个竖状的堆栈菜单。效果如下:

首先我们先进行分析以,页面左侧是菜单栏,按照堆栈式列表展示,包含基本信息和编程语言(仔细的你是否发现路老师文字写错了?),右侧实现的是不同的栏目里的内容表单。下面我们开始进行设计:

1 界面分析

基本信息和编程语言部分是一个列表,用QListWidget​类。基本信息对应的选项页面用到的是表单输入框和单选按钮以及按钮。编程信息页面就只有多选按钮。

2 列表创建

		#常见列表窗口,加入两个列表项self.list=QListWidget()self.list.insertItem(0,"基本信息")self.list.insertItem(1,"编成语言")#单击选择列表行关联槽函数self.list.currentRowChanged.connect(self.display_Win)

当点击列表的时候会触发后面的页面切换,并创建栈对象QStackedWidget(),此时创建页面。

	    #创建两个QWidget通用窗口w1,w2,在w1、w2窗口中加入控件self.w1=QWidget()self.w2=QWidget()self.w1_UI()self.w2_UI()#创建堆栈窗口,将两个通用窗口添加到堆栈窗口页面中self.stack=QStackedWidget()self.stack.addWidget(self.w1)self.stack.addWidget(self.w2)

创建个布局,把列表和栈都放到布局hbox里。

        #将列表和堆栈窗口放到水平布局中hbox=QHBoxLayout()hbox.addWidget(self.list)hbox.addWidget(self.stack)self.setLayout(hbox)

第一个窗口页面UI是这样的:

对应代码如下:

#创建第一个通用窗口def w1_UI(self):fLayout=QFormLayout()self.xm=QLineEdit()fLayout.addRow('姓名:',self.xm)self.xb1=QRadioButton("男")self.xb2=QRadioButton("女")self.xb1.setChecked(True)hLay=QHBoxLayout()hLay.addWidget(self.xb1)hLay.addWidget(self.xb2)fLayout.addRow("性别:",hLay)self.csny=QLineEdit()fLayout.addRow('出生年月:',self.csny)btn=QPushButton("确定")btn.clicked.connect(self.clickedFunc)fLayout.addRow(' ',btn)self.w1.setLayout(fLayout)

第二个窗口是这样的:

其对应代码如下:

 def w2_UI(self):vLay=QVBoxLayout()self.cb1=QCheckBox("C++")self.cb2=QCheckBox("Java")self.cb3=QCheckBox("C#")self.cb1.setChecked(True)vLay.addWidget(self.cb1)vLay.addWidget(self.cb2)vLay.addWidget(self.cb3)self.w2.setLayout(vLay)

然后我们使用槽函数,实现点击每个按钮都触发事件。

    #由当前列表窗口项切换到对应的堆栈窗口页面def display_Win(self,index):self.stack.setCurrentIndex(index)#命令按钮显示两个堆栈页面控件内容def clickedFunc(self):print(self.xm.text())print(self.csny.text())if self.xb1.isChecked():print(self.xb1.text())else:print(self.xb2.text())# 编程语言控件内容if self.cb1.isChecked():print(self.cb1.text())if self.cb2.isChecked():print(self.cb2.text())if self.cb3.isChecked():print(self.cb3.text())

3 完整代码

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 堆栈窗口.py
Description:
Author: lzq
date:2024-07-28 17:15
------------------------------------------------
"""
import sys
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QListWidget, QStackedWidget, \QHBoxLayout, QFormLayout, QLineEdit, QRadioButton, QCheckBoxclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("QStackedWidget测试")self.setGeometry(300,50,10,10)#常见列表窗口,加入两个列表项self.list=QListWidget()self.list.insertItem(0,"基本信息")self.list.insertItem(1,"编成语言")#单击选择列表行关联槽函数self.list.currentRowChanged.connect(self.display_Win)#创建两个QWidget通用窗口w1,w2,在w1、w2窗口中加入控件self.w1=QWidget()self.w2=QWidget()self.w1_UI()self.w2_UI()#创建堆栈窗口,将两个通用窗口添加到堆栈窗口页面中self.stack=QStackedWidget()self.stack.addWidget(self.w1)self.stack.addWidget(self.w2)#将列表和堆栈窗口放到水平布局中hbox=QHBoxLayout()hbox.addWidget(self.list)hbox.addWidget(self.stack)self.setLayout(hbox)#创建第一个通用窗口def w1_UI(self):fLayout=QFormLayout()self.xm=QLineEdit()fLayout.addRow('姓名:',self.xm)self.xb1=QRadioButton("男")self.xb2=QRadioButton("女")self.xb1.setChecked(True)hLay=QHBoxLayout()hLay.addWidget(self.xb1)hLay.addWidget(self.xb2)fLayout.addRow("性别:",hLay)self.csny=QLineEdit()fLayout.addRow('出生年月:',self.csny)btn=QPushButton("确定")btn.clicked.connect(self.clickedFunc)fLayout.addRow(' ',btn)self.w1.setLayout(fLayout)def w2_UI(self):vLay=QVBoxLayout()self.cb1=QCheckBox("C++")self.cb2=QCheckBox("Java")self.cb3=QCheckBox("C#")self.cb1.setChecked(True)vLay.addWidget(self.cb1)vLay.addWidget(self.cb2)vLay.addWidget(self.cb3)self.w2.setLayout(vLay)#由当前列表窗口项切换到对应的堆栈窗口页面def display_Win(self,index):self.stack.setCurrentIndex(index)#命令按钮显示两个堆栈页面控件内容def clickedFunc(self):print(self.xm.text())print(self.csny.text())if self.xb1.isChecked():print(self.xb1.text())else:print(self.xb2.text())# 编程语言控件内容if self.cb1.isChecked():print(self.cb1.text())if self.cb2.isChecked():print(self.cb2.text())if self.cb3.isChecked():print(self.cb3.text())if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())

本文到此结束,有本事你就别点赞,别关注我。路老师一生清贫,上有老下有小,让我一个人默默的付出吧!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 晋升有望,5本易录用的计算机三四区潜力刊,通过率>50%,2个月超速接收,好发
  • 飞牛爬虫FlyBullSpider 一款简单方便强大的爬虫,限时免费 特别适合小白!用它爬下Boss的2024年7月底Java岗位,分析一下程序员就业市场行情
  • Prometheus+Grafana 监控平台实践-搭建常用服务监控告警
  • 7月29(信息差)
  • 家庭教育系列—剑桥通用英语五级考试介绍
  • elementUI 的el-date-picker日期,开始时间不能大于结束时间
  • NSSCTF-GDOUCTF 2023新生赛
  • Springboot与SpringSecurity使用(1):介绍、登录验证
  • 【C#】 使用GDI+获取两个多边形区域相交、非相交区域
  • [数据集][目标检测]船上翻越栏杆危险行为检测数据集VOC+YOLO格式3678张1类别
  • 第13周 简历职位功能开发与Zookeeper实战
  • 4000元投影仪性价比之王:爱普生TW5750极米RS10还是当贝X5S?
  • 前端Long类型精度丢失:后端处理策略
  • 大数据学习之Flink基础
  • ChatGPT:如何在 linux 上运行 springboot 项目,不使用 jar 包的方式,直接编译运行源代码
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Centos6.8 使用rpm安装mysql5.7
  • C语言笔记(第一章:C语言编程)
  • Promise面试题2实现异步串行执行
  • SpiderData 2019年2月16日 DApp数据排行榜
  • spring boot下thymeleaf全局静态变量配置
  • SpringCloud集成分布式事务LCN (一)
  • 欢迎参加第二届中国游戏开发者大会
  • 数组大概知多少
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1)常见O(n^2)排序算法解析
  • (11)MATLAB PCA+SVM 人脸识别
  • (2)空速传感器
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C)一些题4
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (含笔试题)深度解析数据在内存中的存储
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (五)网络优化与超参数选择--九五小庞
  • (转)Windows2003安全设置/维护
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .bat批处理(六):替换字符串中匹配的子串
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net 设置默认首页
  • .net 中viewstate的原理和使用
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • /proc/stat文件详解(翻译)
  • /tmp目录下出现system-private文件夹解决方法
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • ::
  • @html.ActionLink的几种参数格式
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?