前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5 模态对话框

PyQt5 模态对话框

作者头像
用户6021899
发布2019-08-13 22:57:59
2.4K0
发布2019-08-13 22:57:59
举报
文章被收录于专栏:Python编程 pyqt matplotlib

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

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

代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档