对话框在GUI编程中是比较重要的控件,这里按照对话框的“智能”水平,把对话框分为”Dumb Dialogs,Standard Dialogs,Smart Dialogs”三种。
首先是Dumb Dialogs。也就是比较傻瓜式的对话框,看一个例子:
我们要设计一个简单的字体设置对话框,要求可选择字体,和设置字体大小。
程序如下:font.py
#!/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函数完成对话框的初始化
super(FontPropertiesDlg, self).__init__(parent)
FontStyleLabel = QLabel(u"中文字体:")
FontstyleComboBox = QComboBox()
FontstyleComboBox.addItems([u"宋体", u"黑体", u"仿宋",
u"隶书", u"楷体"])
FontSizeLabel = QLabel(u"字体大小")
FontSizeSpinBox = QSpinBox()
FontSizeSpinBox.setRange(0, 90)
FontEffectCheckBox =QCheckBox(u"使用特效")
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(FontstyleComboBox, 0, 1)
layout.addWidget(FontSizeLabel, 1, 0)
layout.addWidget(FontSizeSpinBox, 1, 1)
layout.addWidget(FontEffectCheckBox,1,2)
layout.addLayout(buttonLayout, 2, 0,1,3)
self.setLayout(layout)
#窗口的标题
self.setWindowTitle(u"字体")
app = QApplication(sys.argv)
font= FontPropertiesDlg()
font.show()
app.exec_()
结果如下:
程序的内容就是创建一个对话框的窗体,其中创建了一些控件,然后通过layout方法来在窗体上布局这些控件,最后是创建应用和消息循环。下面看看layout是如何布局的。
这里用到了两个layout一个是buttonlayout,一个layout,其中的buttonlayout是放到了layout上。
buttonLayout = QHBoxLayout()
buttonLayout.addStretch()
button是水平放置的,QHBoxLayout,而且用到了Stretch,也就是说这里的确定和取消按钮虽然是水平放置的,但是由于stretch的作用,两个按钮会靠右放置,而且随着窗口大小的改变,也是靠右边的,如上图。(如果把上面第二句去掉的话,两个按钮的显示就变了,左右平局分布)。