PyQt 学习笔记(3)--Standard Dialog

   一般的标准对话框是什么样子的呢?我们还是以 word里的字体设置为例。一般都是通过菜单,工具栏,按钮等的响应而创建的对话框,而且对话框分为模态(modal)和非模态(modalless),对于标准对话框,当用户按下确定按钮,对话框消失,并且主窗口得到了用户确认的信息(设置的字体),按取消按钮,对话框消失,没有别的改变。

   首先看一个 modal对话框的例子:用户点击按钮,弹出字体设置对话框,用户点击确定,显示用户的选择,关闭窗口。
 

#!/usr/bin/env python
#coding=utf-8

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class FontPropertiesDlg(QDialog):
    def __init__(self,parent=None):
        super(FontPropertiesDlg, self).__init__(parent)
        FontStyleLabel = QLabel(u"中文字体:")
        self.FontstyleComboBox = QComboBox()
        self.FontstyleComboBox.addItems([u"宋体",u"黑体", u"仿宋",
                                         u"隶书", u"楷体"])
        self.FontEffectCheckBox =QCheckBox(u"使用特效")
        FontSizeLabel = QLabel(u"字体大小")
        self.FontSizeSpinBox = QSpinBox()
        self.FontSizeSpinBox.setRange(1, 90)
        okButton = QPushButton(u"确定")
        cancelButton = QPushButton(u"取消")
        
        buttonLayout = QHBoxLayout()
        buttonLayout.addStretch()
        buttonLayout.addWidget(okButton)
        buttonLayout.addWidget(cancelButton)
        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.addLayout(buttonLayout, 2, 0)
        self.setLayout(layout)
        #为okButton与cancelButton部件的点击信号添加槽函数
        self.connect(okButton,SIGNAL("clicked()"),self,SLOT("accept()"))
        self.connect(cancelButton,SIGNAL("clicked()"),self,SLOT("reject()"))
        self.setWindowTitle(u"字体")
        
class MainDialog(QDialog):
    def __init__(self,parent=None):
        super(MainDialog,self).__init__(parent)
        #创建一个FontPropertiesDlg对象
        self.FontPropertiesDlg=None
        #定义一个字典
        self.format=dict(fontstyle="宋体",fontsize=1,fonteffect=False)
        #创建两个按钮部件
        FontButton1 = QPushButton(u"设置字体(模态)")
        FontButton2 = QPushButton(u"设置字体(非模态)")
        self.label = QLabel(u"默认选择")
        #创建网格部件
        layout = QGridLayout()
        layout.addWidget(FontButton1,0,0)
        layout.addWidget(FontButton2,0,1)
        layout.addWidget(self.label)
        self.setLayout(layout)
        #信号与槽函数,槽函数为自身定义的函数
        self.connect(FontButton1,SIGNAL("clicked()"),self.FontModalDialog)
        self.connect(FontButton2,SIGNAL("clicked()"),self.FontModalessDialog)
        self.setWindowTitle(u"模态与非模态对话框")
        #实现updataData函数
        self.updataData()
    def updataData(self):
        #为上面创建的label部件添加内容
        self.label.setText(u"选择字体:%s<br>字体大小:%d<br>是否特效:%s"
        %(self.format["fontstyle"],self.format["fontsize"],self.format["fonteffect"]))
    def FontModalDialog(self):
        #创建一个FontPropertiesDlg类对象并且赋值
        dialog = FontPropertiesDlg(self)
        if dialog.exec_():
           self.format["fontstyle"] =dialog.FontstyleComboBox.currentText()
           self.format["fontsize"] = dialog.FontSizeSpinBox.value()
           self.format["fonteffect"] = dialog.FontEffectCheckBox.isChecked()
           self.updataData()
    def FontModalessDialog(self):
        pass
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
font= MainDialog()
font.show()
app.exec_()     
        
        
        
运行结果:

   
   其中右边的对话框是弹出的模态对话框,通过设置,确定以后可以在主对话框上显示出 更新的内容。

   其中“设置字体(非模态)“函数没有完成功能。


   在模态对话框里面,我们是调用了 dialog的  exec_()函数,它能产生并显示对话框,并进入消息循环,此时就不能和主窗口进行交互了,只能点击确定或者取消,关闭此模态对话框才能继续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值