上位机开发PyQt5(三)【布局、单选框和多选框、对话框】

目录

一、布局Layout

1. 布局简介

2. 水平布局QHBoxLayout

3. 竖直布局QVBoxLayout

4. 表单布局QFormLayout

5. 布局嵌套

二、单选框和复选框

1. 单选框

2. 复选框

三、对话框

1. QMessageBox

2. QIputDialog


一、布局Layout

1. 布局简介

一个pyqt窗口中可以有多个控件。所谓布局,指的就是多个控件在窗口中的展示方式

布局方式大致分为:

  • 水平布局
  • 垂直布局
  • 网格布局
  • 表单布局

2. 水平布局QHBoxLayout

水平布局中,是按照从左往右的顺序添加控件的

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建QHBoxlayout对象
layout = QHBoxLayout()# 添加5个QPushButton控件
layout.addWidget(QPushButton("按钮1"))
layout.addWidget(QPushButton("按钮2"))
layout.addWidget(QPushButton("按钮3"))
layout.addWidget(QPushButton("按钮4"))
layout.addWidget(QPushButton("按钮5"))# 窗口添加布局
w.setLayout(layout)# 设置窗口大小
w.resize(400, 300)# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

3. 竖直布局QVBoxLayout

竖直布局采用QVBoxLayout,是采用从上往下的方式添加控件的

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建QVBoxlayout对象
layout = QVBoxLayout()# 添加5个QPushButton控件
layout.addWidget(QPushButton("按钮1"))
layout.addWidget(QPushButton("按钮2"))
layout.addWidget(QPushButton("按钮3"))
layout.addWidget(QPushButton("按钮4"))
layout.addWidget(QPushButton("按钮5"))# 窗口添加布局
w.setLayout(layout)# 设置窗口大小
w.resize(400, 300)# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

4. 表单布局QFormLayout

表单布局是label-field式的表单布局,顾名思义就是实现表单方式的布局

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建QFromLayout对象
layout = QFormLayout()# 设置用户名QLineEdit对象
user = QLineEdit()# 设置密码QLineEdit对象
pwd = QLineEdit()
# 设置密码显示为*
pwd.setEchoMode(pwd.Password)# 设计手机号QLineEdit对象
phone = QLineEdit()
# 创建QPushButton对象
btn = QPushButton("注册信息")layout.addRow("用户名:", user)
layout.addRow("密码:", pwd)
layout.addRow("手机号:", phone)
layout.addRow("", btn)# 将layout设置到窗口
w.setLayout(layout)# 自定义槽函数
def on_submit():print("用户名:", user.text())print("密码:", pwd.text())print("手机号:", phone.text())# QPushButton对象信号clicked绑定自定义槽函数on_submit
btn.clicked.connect(on_submit)# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

5. 布局嵌套

通过布局嵌套可以实现更加复杂的布局

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 1. 创建水平布局,代表最外层
h_layout = QHBoxLayout()
# 2. 创建三个垂直布局,添加到水平布局中
h_layout1 = QHBoxLayout()
v_layout1 = QVBoxLayout()
v_layout2 = QVBoxLayout()
v_layout3 = QVBoxLayout()htb1 = QPushButton("btn1")
htb2 = QPushButton("btn2")h_layout1.addWidget(htb1)
h_layout1.addWidget(htb2)h_layout.addLayout(h_layout1)# 3. 创建两个按钮添加到第一个垂直布局中
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")v_layout1.addWidget(btn1)
v_layout1.addWidget(btn2)
# 4. 把第一个垂直布局添加到水平布局中
h_layout.addLayout(v_layout1)# 5. 创建三个按钮添加到第二个垂直布局中
vtb3 = QPushButton("按钮3")
vtb4 = QPushButton("按钮4")
vtb5 = QPushButton("按钮5")v_layout2.addWidget(vtb3)
v_layout2.addWidget(vtb4)
v_layout2.addWidget(vtb5)
# 6. 把第二个垂直布局添加到水平布局中
h_layout.addLayout(v_layout2)# 7. 创建四个按钮添加到第三个垂直布局中
vtb6 = QPushButton("按钮6")
vtb7 = QPushButton("按钮7")
vtb8 = QPushButton("按钮8")
vtb9 = QPushButton("按钮9")v_layout3.addWidget(vtb6)
v_layout3.addWidget(vtb7)
v_layout3.addWidget(vtb8)
v_layout3.addWidget(vtb9)
# 8. 把第三个垂直布局添加到水平布局中
h_layout.addLayout(v_layout3)# 9. 把水平布局添加到窗口中
w.setLayout(h_layout)# 设置窗口大小
w.resize(640, 400)# 设置窗口标题
w.setWindowTitle("嵌套布局")# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

二、单选框和复选框

1. 单选框

QRadioButton是单选按钮,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项

单选框选中的信号是:toggled

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建一个水平布局
layout = QHBoxLayout()# 创建QRadioButton对象,设置内容为男
rb1 = QRadioButton('男')# 创建QRadioButton对象,设置内容为女
rb2 = QRadioButton('女')# 设置为选中状态 默认rb2选中
rb2.setChecked(True)# 将rb1和rb2添加到布局中
layout.addWidget(rb1)
layout.addWidget(rb2)# 设置布局
w.setLayout(layout)# 设置窗口标题
w.setWindowTitle('单选框QRadioButton')# 设置窗口大小
w.resize(100, 50)# 定义按钮点击事件 判断是哪个按钮被点击
def on_toggled():if rb1.isChecked():print('男被选中')elif rb2.isChecked():print('女被选中',rb2.text())# 信号绑定
rb1.clicked.connect(on_toggled)
rb2.clicked.connect(on_toggled)# clicked 信号 当按钮被点击时触发  触发一次
# toggled 信号 当按钮状态发生改变时触发 可以多次触发# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

如果想给QRadioButton组设置监听事件,可按照如下代码添加:

# 声明槽函数
def on_group_toggle(btn: QRadioButton):print(btn, btn.isChecked())# 添加两个单选钮到QButtonGroup,并添加选中事件
group = QButtonGroup(w)
group.addButton(btn1)
group.addButton(btn2)
group.buttonToggled.connect(on_group_toggle)

2. 复选框

QCheckBox提供了一组带文本标签的复选框,用户可以选择多个选项

复选框的状态变化信号是stateChanged

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建垂直布局
layout = QVBoxLayout()# 创建QCheckBox对象 复选框
cb1 = QCheckBox("语文")
cb2 = QCheckBox("数学")
cb3 = QCheckBox("英语")# 把复选框添加到layout布局中
layout.addWidget(cb1)
layout.addWidget(cb2)
layout.addWidget(cb3)# 把layout布局添加到窗口中
w.setLayout(layout)# 定义槽函数
def slot():if cb1.isChecked():print("今天上语文课")if cb2.isChecked():print("下节课上数学课")if cb3.isChecked():print("下节课上英语课")# cb1和cb2、cb3的信号statusChanged连接到槽函数
cb1.stateChanged.connect(slot)
cb2.stateChanged.connect(slot)
cb3.stateChanged.connect(slot)# stateChanged 信号 状态改变
# isChecked() 方法 判断是否选中# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

三、对话框

对话框是为了更好地实现人与程序的交互
对话框主要是完成特定场景下的功能,比如删除确认等

QDialog的子类有QMessageBoxQFileDialogQFontDialogQInputDialog

1. QMessageBox

QMessageBox是普通的对话框

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 设置按钮对象
# btn = QPushButton("点击抽奖")
btn = QPushButton()# 设置按钮的文本内容
btn.setText("点击抽奖")# 获取内容
print(btn.text())# 指定父对象
btn.setParent(w)def btn_clicked():res = QMessageBox.information(w, "title", "请确认协议内容", QMessageBox.Ok | QMessageBox.Cancel)# print(res)if res == QMessageBox.Ok:print("ok")else:print("error")# btn设置槽函数
btn.clicked.connect(btn_clicked)# 设置弹框标题
w.setWindowTitle("消息对话框")
# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

2. QIputDialog

QIputDialog是输入对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成

示例代码:

import sysfrom PyQt5.QtWidgets import *# 创建QApplication对象
app = QApplication(sys.argv)# 创建QWidget对象  窗口
w = QWidget()# 创建QVBoxLayout对象
layout = QVBoxLayout()# 创建QLabel对象
label = QLabel('匿名')# # label设置为匿名
# label.setText("匿名")# layout添加label
layout.addWidget(label)
# 创建QPushButton对象
btn = QPushButton('创建角色')# layout添加按钮
layout.addWidget(btn)# 方法
def show_dialog():res, flag = QInputDialog.getText(w, "标题", "请创建角色")print(res, flag)if flag:print("创建角色成功:", res)# btn点击事件, 槽函数中创建QInputDialog对象,获取用户输入的内容,给label设置内容
btn.clicked.connect(show_dialog)# 添加窗口布局
w.setLayout(layout)# 设置窗口标题
w.setWindowTitle('QInputDialog输入对话框')# 显示窗口
w.show()# 进入事件循环
sys.exit(app.exec_())

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

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

相关文章

百度文库可直接下载VIP文章

百度文库文件下载 百度文库是百度公司推出的一款在线文档分享平台,它可以让用户免费上传、分享、下载和浏览各类文档资源,包括但不限于文章、论文、报告、PPT、书籍等。 好了,废话不多说,这里推出的新生产的软件,可直…

机器学习的指标评价

之前在学校的小发明制作中,在终期答辩的时候,虽然整个项目的流程都答的很流畅。 在老师提问的过程中,当老师问我recall,precision,accuracy等指标是如何计算的,又能够表示模型的哪方面指标做得好。我听到这个问题的时候&#xff…

图片倾斜矫正处理(Hough Transform)

目录 倾斜矫正原理及实现方式Canny边缘检测非极大值抑制霍夫变换 倾斜矫正原理及实现方式 代码连接:https://github.com/shuyeah2356/Image-Angel-correction/tree/main 倾斜矫正的实现原理: 使用霍夫变换检测图片中的直线; 计算直线与水平方…

【与 Apollo 共创生态:展望自动驾驶全新未来】

1、引言 历经七年的不懈追求与创新,Apollo开放平台已陆续推出了13个版本,汇聚了来自全球170多个国家与地区的16万名开发者及220多家合作伙伴。随着Apollo开放平台的不断创新与发展,Apollo在2024年4月19日迎来了Apollo开放平台的七周年大会&a…

猿人学第七题-动态字体-随风漂移

前言:该题主要是考对fontTools.ttLib.TTFont的操作,另外就是对字典互相映射的操作 一、woff文件存储 from fontTools.ttLib import TTFont #pip install fontTools def save_woff(response):woff response[woff]woff_file base64.b64decode(woff.enc…

.排序总讲.

在这里赘叙一下我对y总前四节所讲排序的分治思想以及递归的深度理解。 就以788.逆序对 这一题来讲(我认为这一题对于分治和递归的思想体现的淋淋尽致)。 题目: 给定一个长度为 n𝑛 的整数数列,请你计算数列中的逆序对…

Linux的软件包管理器-yum

文章目录 软件包的概念yum源的配置的原因yum的使用查看软件包安装软件卸载软件 软件包的概念 软件包(SoftWare Package)是指具有特定的功能,用来完成特定任务的一个程序或一组程序。可分为应用软件包和系统软件包两大类 在Linux系统中,下载安装软件的方式…

视频下载器 UC网盘

老王导航 - 复杂问题找老王,简单问题百度搜 神器啊

保研面试408复习 2——操作系统、计网

文章目录 1、操作系统一、进程、线程的概念以及区别?二、进程间的通信方式? 2、计算机网络一、香农准则二、协议的三要素1. 语法2. 语义3. 时序 标记文字记忆,加粗文字注意,普通文字理解。 1、操作系统 一、进程、线程的概念以及…

团队经理口才训练教案(3篇)

团队经理口才训练教案(3篇) **篇:基础口才训练 一、教学目标 让团队经理了解口才在团队管理中的重要性。 教授基础口才技巧,如发音、语速、语调等。 二、教学内容 口才的重要性 强调团队经理的口才能力对团队凝聚力、沟通…

牛客NC383 主持人调度(一)【简单 排序 Java/Go/C++】

题目 题目链接: https://www.nowcoder.com/practice/e160b104354649b69600803184094adb 思路 直接看代码,不难Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返…

Android Binder机制

一.简介 Binder是什么? Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。 例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于 此,整个Android系统架构中,大量采…

BI不等同数据分析,别搞错了!

✅作者简介:《数据运营:数据分析模型撬动新零售实战》作者、《数据实践之美》作者、数据科技公司创始人、多次参加国家级大数据行业标准研讨及制定、高端企培合作讲师。 🌸公众号:风姑娘的数字视角,免费分享数据应用相…

小红的循环移位

题目描述:小红拿到了一个数字串,她每次操作可以使得其向左循环移动一位。将串 ss0 s1...sn−1s ​ 向左循环移动一位,将得到串s1...sn−1s0。小红想知道,使得该数字串变成4的倍数,需要最少操作多少次?&…

步态识别论文(6)GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation

摘要: 视角变化导致步态外观存在显着差异。因此,识别跨视图场景中的步态是非常具有挑战性的。最近的方法要么在进行识别之前将步态从原始视图转换为目标视图,要么通过蛮力学习或解耦学习提取与相机视图无关的步态特征。然而,这些方法有许多约…

2010NOIP普及组真题 2. 接水问题

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想: 朴素模拟: 1、先给每个b[i]水龙头分配一个人a[i],b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…

FFmpeg———encode_video(学习)

目录 前言源码函数最终效果 前言 encode_video:实现了对图片使用指定编码进行编码,生成可播放的视频流,编译时出现了一些错误,做了一些调整。 基本流程: 1、获取指定的编码器 2、编码器内存申请 3、编码器上下文内容参数设置 4、…

政安晨:【Keras机器学习示例演绎】(三十五)—— 使用 LayerScale 的类注意图像变换器

目录 简介 导入 层刻度层 随机深度层 类注意力 会说话的头注意力 前馈网络 其他模块 拼凑碎片:CaiT 模型 定义模型配置 模型实例化 加载预训练模型 推理工具 加载图像 获取预测 关注层可视化 结论 政安晨的个人主页:政安晨 欢迎 &#…

计算机专业就业前景以及工资待遇水平怎么样

计算机专业毕业生的就业前景不错的,计算机专业人才的需求量大,各行各业都需要这类人才来进行软件开发、数据分析、网络安全管理、系统维护等工,工资待遇水平较高,以下是上大学网(www.sdaxue.com)整理的计算机专业就业前…

SMB协议之-那些隐藏/非隐藏共享share

在前面的文章中,介绍了SMB协议相关的内容,详见我的专栏《网络攻防协议实战分析》,连接这里。在SMB协议中往往会使用 tree connect命令连接到对应的远程共享地址。如果你经常接触到SMB协议,相信你对于ADMIN$ ,IPC$ ,C$ 等多种共享一…