Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyQt5 模态对话框

PyQt5 模态对话框

作者头像
用户6021899
发布于 2019-08-13 14:57:59
发布于 2019-08-13 14:57:59
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

所谓的模态对话框是指,一旦调用该对话框,它就会成为应用程序唯一能与用户进行交互的部件。在关闭对话框之前,用户都不能使用应用程序的其他部件。模态对话框是最简单的,因为会阻塞与对话框的父窗口及父窗口的兄弟窗口之间的其他任何交互,所以可降低对那些正在使用的数据在后台被修改的风险。模态对话框的缺点是用户不能实时地看到修改效果。

之前各篇介绍的内置的标准对话框都是模态对话框。本篇介绍自定义的模态对话框。详情请参见代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import *
#模态对话框,字体选择组合框,按钮盒子
class FontPropertiesDlg(QDialog):
 
    def __init__(self,parent=None):
        super().__init__(parent)
 
        FontStyleLabel = QLabel("字体:")
        self.FontstyleComboBox = QFontComboBox()#字体选择组合框
        self.FontEffectCheckBox =QCheckBox("使用特效")
        FontSizeLabel = QLabel("字体大小")
        self.FontSizeSpinBox = QSpinBox()
        self.FontSizeSpinBox.setRange(6, 36)
        self.FontSizeSpinBox.setValue(12)
 
        #“确定” “取消” 按钮 可以使用预置的 复合控件 按钮盒子
        '''
        #可以使用内置标准按钮
        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        buttonBox.accepted.connect(self.accept)
        buttonBox.rejected.connect(self.reject)
        '''
        buttonBox = QDialogButtonBox()
        #buttonBox.setOrientation(Qt.Vertical)  # 设为竖向显示,默认为水平方向
        #buttonBox.setStandardButtons(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
        buttonBox.addButton("确定", QDialogButtonBox.AcceptRole)
        buttonBox.addButton("取消", QDialogButtonBox.RejectRole)
        buttonBox.accepted.connect(self.accept)
        buttonBox.rejected.connect(self.reject)
 
        layout = QGridLayout()
 
        layout.addWidget(FontStyleLabel, 0, 0)
        layout.addWidget(self.FontstyleComboBox, 0, 1)
        layout.addWidget(FontSizeLabel, 1, 0)
        layout.addWidget(self.FontSizeSpinBox, 1, 1)
        layout.addWidget(self.FontEffectCheckBox,1,2)
        layout.addWidget(buttonBox,2,2)
 
        self.setLayout(layout)
        self.setWindowTitle("字体设置")
 
class MainDialog(QDialog):
    def __init__(self,parent=None):
        super(MainDialog,self).__init__(parent)
        self.FontPropertiesDlg=None
        self.format=dict(fontstyle="宋体",fontsize=10,fonteffect=False)
        FontButton1 = QPushButton("设置字体(模态)")
        self.label = QLabel("默认选择")
        layout = QGridLayout()
        layout.addWidget(FontButton1,0,0)
        layout.addWidget(self.label)
        self.setLayout(layout)
        FontButton1.clicked.connect(self.FontModalDialog)
 
        self.setWindowTitle("模态对话框")
        self.labelFont = QFont(self.format["fontstyle"],self.format["fontsize"])
        self.updateLabel()
    def updateLabel(self):
        self.label.setText("选择的字体:%s    字体大小:%d    是否特效:%s" %(self.format["fontstyle"],self.format["fontsize"],self.format["fonteffect"]))
        self.label.setFont(self.labelFont)
    def updateUI(self):#For modaless dialog
            self.format["fontstyle"] = self.modalessDialog.FontstyleComboBox.currentText()
            self.format["fontsize"] = self.modalessDialog.FontSizeSpinBox.value()
            self.format["fonteffect"] = self.modalessDialog.FontEffectCheckBox.isChecked()
            self.labelFont = QFont(self.format["fontstyle"],self.format["fontsize"])
            self.updateLabel()       
 
    def FontModalDialog(self):
        dialog = FontPropertiesDlg(self) #若使用局部变量,则每次要重新创建
        #dialog.exec_() 会模态化显示对话框,直至关闭它
        if dialog.exec_():#accept 则返回1,reject返回0
            self.format["fontstyle"] = dialog.FontstyleComboBox.currentText()
            self.format["fontsize"] = dialog.FontSizeSpinBox.value()
            self.format["fonteffect"] = dialog.FontEffectCheckBox.isChecked()
            self.labelFont = QFont(self.format["fontstyle"],self.format["fontsize"])
            self.updateLabel()
app = QApplication(sys.argv)
font= MainDialog()
font.show()
app.exec_()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyQt十讲 | 零基础教你实现界面多窗口跳跃
在PyQt编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,今天我们来学习一下界面多窗口的转换。
潘永斌
2019/10/08
2.3K0
PyQt十讲 | 零基础教你实现界面多窗口跳跃
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的。如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。
不脱发的程序猿
2021/12/08
3.3K0
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(序篇) 【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
半截诗
2024/10/09
1.3K0
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
PyQt5 基本窗口控件(绘图类 / 拖拽 / 剪贴板 / 日历时间 / 菜单、工具、状态栏 / 打印)
learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5
Michael阿明
2022/05/10
1.9K0
PyQt5 基本窗口控件(绘图类 / 拖拽 / 剪贴板 / 日历时间 / 菜单、工具、状态栏 / 打印)
PyQt5案例汇总(完整版)
PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。
victorfengming
2021/11/26
5.2K0
PyQt5 高级界面控制(多线程、网页交互、调用JavaScript)
learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5
Michael阿明
2022/06/05
2.8K0
PyQt5 高级界面控制(多线程、网页交互、调用JavaScript)
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C++ 框架,用于构建桌面应用程序。通过 PyQt5,我们可以用 Python 轻松构建跨平台的桌面应用程序,支持 Windows、macOS 和 Linux。
半截诗
2024/10/09
18.7K0
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
PyQt5 布局管理(水平、垂直、网格、表单、嵌套、QSplitter)
learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5
Michael阿明
2022/06/06
4.7K0
PyQt5 布局管理(水平、垂直、网格、表单、嵌套、QSplitter)
python pyqt5 弹出框传递数据
from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys
用户5760343
2019/07/22
1.9K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
文章目录 1. 状态栏 2. 窗口居中显示 3. 关闭窗口 4. QWidget 5. 添加图标 6. 气泡提示信息 7. QLabel 添加快捷键 8. QLineEdit echoMode 验证器 inputMask 综合练习 9. QTextEdit learn from 《PyQt5 快速开发与实战》 1. 状态栏 self.statusbar.showMessage("hello, Michael", 2000),第二个参数是显示多长时间ms,默认无限长时间 # -*- coding: utf-8
Michael阿明
2022/05/10
2.6K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
PyQt5 文件对话框QFileDialog
4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名。
用户6021899
2019/08/14
7.4K0
PyQt5 文档打印
本篇通过Python3+PyQt5实现《python Qt Gui 快速编程》这本书13章文档打印功能。本文共通过三种方式: 1,使用HTML和QTextDOcument打印文档,最简单 2,使用QTextCusor和QTextDocument打印文档 3,使用QPainter打印文档 使用Qpainter打印文档比QTextDocument需要更复杂的计算,但是QPainter确实能够对输出赋予完全控制。
用户6021899
2019/08/14
1.4K0
Qt标准对话框的使用
学习编程个人觉得还是得从代码谈起,一方面有利于加深理解,另一方面也方便使(摘)用(抄)。
mythsman
2022/11/14
5540
python pyqt5 QFontDialog 字体选择框
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *
用户5760343
2019/07/05
9890
PyQt5常见布局、控件用法有哪些?
闻说社
2024/07/12
1590
PyQt5常见布局、控件用法有哪些?
Qt官方示例-标签对话框
  对话框为应用程序与用户通信提供了一种有效的方法,但是复杂的对话框会遇到这样的问题,即它们通常占用过多的屏幕区域。通过在对话框中使用多个标签,可以将信息分为不同的类别,同时仍可访问。
Qt君
2023/03/17
1.5K0
Qt官方示例-标签对话框
PyQt QStackedWidget(层叠窗口部件)
QStackedWidget (层叠窗口部件)和 QTabWidget 的作用相似,都可以把多组不同的部件 放置到不同的页面显示,从而节省 窗口空间。它们的使用方法也相似,通过下面的方法可以添加页面:
用户6021899
2019/08/14
3.4K0
PyQt5可编辑下拉框(comboBox):editable - python TCP服务器v1.5 - 客户端连接界面增加自定义参数(设置超时, 连接地址可选)
login.png(应该为.ico格式,直接将.png改为.ico即可,我已经换好了,但csdn平台不能传ico,所以改为了.png).
zmh-program
2023/02/06
1.4K0
python pyqt5 QTimer
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QListWidget, QGridLayout, QLabel from PyQt5.QtCore import QTimer, QDateTime import sys
用户5760343
2019/07/22
8890
推荐阅读
相关推荐
PyQt十讲 | 零基础教你实现界面多窗口跳跃
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验