热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyQt5简易对话框深入解析

本文详细介绍了如何在PyQt5中创建简易对话框,包括对话框的基本结构、布局管理以及源代码实现。通过实例代码,展示了如何设置窗口部件、布局方式及对话框的基本操作。

PyQt5简易对话框

简介


简易对话框是一种常用的交互方式,主要用于收集用户的简单输入或确认信息。在PyQt5中,简易对话框可以通过简单的API调用来实现,无需编写复杂的逻辑代码。这种对话框通常包含一个或多个窗口部件,如文本框、复选框等,并提供“确定”和“取消”按钮供用户操作。


简易对话框的主要特点包括:

- 对话框调用者负责初始化和获取窗口部件的值。

- 不直接处理窗口部件中的数据编辑和显示。

- 通常不执行复杂的窗体验证,仅提供基本的验证功能。

- 是模态对话框,用户必须关闭对话框才能继续操作主程序。


简易对话框的优点在于其简洁性和易用性,但缺点是代码与用户界面紧密耦合,难以实现复杂的验证逻辑,且重复使用时不如标准对话框灵活。


布局管理


在PyQt5中,布局管理是组织窗口部件的关键。以下是一些常用的布局方法:















































方法描述
b.addLayout(l)将布局l添加到QBoxLayout b中,b通常是QHBoxLayout或QVBoxLayout。
b.addSpacing(i)在布局b中添加一个固定大小为i的空白区域。
b.addStretch(i)在布局b中添加一个可伸缩的空间,其伸展因子为i。
b.addWidget(w)在布局b中添加一个QWidget w。
b.setStretchFactor(x, i)将布局b中的布局或窗口部件x的伸展因子设置为i。
g.addLayout(l, r, c)将布局l添加到QGridLayout g的第r行和第c列,可以指定合并的行数和列数。
g.addWidget(w, r, c)将QWidget w添加到QGridLayout g的第r行和第c列,可以指定合并的行数和列数。
g.setRowStretch(r, i)将QGridLayout g的第r行拉伸到i。
g.setColumnStretch(c, i)将QGridLayout g的第c列拉伸到i。

源代码示例



import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class PenPropertiesDlg(QDialog):

def __init__(self, parent=None):

super().__init__(parent)

widthLabel = QLabel("&Width:")
self.widthSpinBox = QSpinBox()
widthLabel.setBuddy(self.widthSpinBox)
self.widthSpinBox.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
self.widthSpinBox.setRange(0, 24)
self.beveledCheckBox = QCheckBox("&Beveled edges")

styleLabel = QLabel('&Style:')
self.styleComboBox = QComboBox()
styleLabel.setBuddy(self.styleComboBox)
self.styleComboBox.addItems(["Solid", "Dashed", "Dotted", "DashDotted", "DashDotDotted"])
okButton = QPushButton("&OK")
cancelButton = QPushButton("Cancel")

buttOnLayout= QHBoxLayout()
buttonLayout.addStretch()
buttonLayout.addWidget(okButton)
buttonLayout.addWidget(cancelButton)
layout = QGridLayout()
layout.addWidget(widthLabel, 0, 0)
layout.addWidget(self.widthSpinBox, 0, 1)
layout.addWidget(self.beveledCheckBox, 0, 2)
layout.addWidget(styleLabel, 1, 0)
layout.addWidget(self.styleComboBox, 1, 1, 1, 2)
layout.addLayout(buttonLayout, 2, 0, 1, 3)
self.setLayout(layout)

okButton.clicked.connect(self.accept)
cancelButton.clicked.connect(self.reject)
self.setWindowTitle("Pen Properties")


class Form(QDialog):

def __init__(self):

super().__init__()

self.width = 1
self.beveled = False
self.style = "Solid"

penButtOnInline= QPushButton("Set Pen... (Dumb & Inline)")
penButton = QPushButton("Set Pen... (Dumb & Class)")
self.label = QLabel("The Pen has not been set")
self.label.setTextFormat(Qt.RichText)

layout = QVBoxLayout()
layout.addWidget(penButtonInline)
layout.addWidget(penButton)
layout.addWidget(self.label)
self.setLayout(layout)

penButtonInline.clicked.connect(self.setPenInline)
penButton.clicked.connect(self.setPenProperties)

self.setWindowTitle("Pen")
self.updateData()

def updateData(self):

bevel = ""
if self.beveled:
bevel = "
Beveled"
self.label.setText(f"Width = {self.width}
Style = {self.style}{bevel}")

def setPenInline(self):

widthLabel = QLabel("&Width:")
widthSpinBox = QSpinBox()
widthLabel.setBuddy(widthSpinBox)
widthSpinBox.setAlignment(Qt.AlignRight)
widthSpinBox.setRange(0, 24)
widthSpinBox.setValue(self.width)

beveledCheckBox = QCheckBox("&Beveled edges")
beveledCheckBox.setChecked(self.beveled)

styleLabel = QLabel("&Style:")
styleComboBox = QComboBox()
styleLabel.setBuddy(styleComboBox)
styleComboBox.addItems(["Solid", "Dashed", "Dotted", "DashDotted", "DashDotDotted"])
styleComboBox.setCurrentIndex(styleComboBox.findText(self.style))

okButton = QPushButton("&OK")
cancelButton = QPushButton("Cancel")

buttOnLayout= QHBoxLayout()
buttonLayout.addStretch()
buttonLayout.addWidget(okButton)
buttonLayout.addWidget(cancelButton)

layout = QGridLayout()
layout.addWidget(widthLabel, 0, 0)
layout.addWidget(widthSpinBox, 0, 1)
layout.addWidget(beveledCheckBox, 0, 2)
layout.addWidget(styleLabel, 1, 0)
layout.addWidget(styleComboBox, 1, 1, 1, 2)
layout.addLayout(buttonLayout, 2, 0, 1, 3)

form = QDialog()
form.setLayout(layout)

okButton.clicked.connect(form.accept)
cancelButton.clicked.connect(form.reject)
form.setWindowTitle("Pen Properties")

if form.exec_():
self.width = widthSpinBox.value()
self.beveled = beveledCheckBox.isChecked()
self.style = styleComboBox.currentText()
self.updateData()

def setPenProperties(self):

dialog = PenPropertiesDlg(self)
dialog.widthSpinBox.setValue(self.width)
dialog.beveledCheckBox.setChecked(self.beveled)
dialog.styleComboBox.setCurrentIndex(dialog.styleComboBox.findText(self.style))

if dialog.exec_():
self.width = dialog.widthSpinBox.value()
self.beveled = dialog.beveledCheckBox.isChecked()
self.style = dialog.styleComboBox.currentText()
self.updateData()

if __name__ == "__main__":

app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())

推荐阅读
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • Eclipse 下 JavaFX 程序开发指南
    本文介绍了 JavaFX,这是一个用于创建富客户端应用程序的 Java 图形和媒体工具包,并详细说明了如何在 Eclipse 环境中配置和开发 JavaFX 应用。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 交互式左右滑动导航菜单设计
    本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ... [详细]
  • 本文介绍如何在Windows Forms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。 ... [详细]
  • 本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ... [详细]
  • 本文提供了手势解锁功能的详细实现方法和源码下载链接。通过分析手势解锁的界面和逻辑,详细介绍如何在iOS应用中实现这一功能。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 本文将详细介绍如何封装一个多功能的PickerView组件,包括文本选择、日期选择和地理位置选择等功能,旨在提供一个更加灵活和易于使用的PickerView解决方案。 ... [详细]
  • Gradle复合构建详解
    自Gradle 3.3起,复合构建功能得以实现,这是一种能够整合其他独立构建的高级构建模式。本文将详细介绍复合构建与多项目构建的区别,以及如何在实际项目中应用复合构建。 ... [详细]
author-avatar
珍妮20111030
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有