首先介绍相关的函数:
FontSizeLabel = QtGui.QLabel("部件提示"):创建一个标签部件
FontstyleComboBox = QtGui.QComboBox():创建一个下拉样式的部件
FontstyleComboBox.addItems():为下拉样式部件添加元素
FontSizeSpinBox =QtGui.QSpinBox():上下调节一定的数字范围部件
FontSizeSpinBox.setRange(0, 90):为数字范围部件设置范围
FontEffectCheckBox =QtGui.QCheckBox("部件提示"):设置勾选部件
okButton = QtGui.QPushButton("部件提示"):创建一个按钮部件
Layout.addWidget(a):添加控件a到Layout中
self.setLayout(Layout):为自身添加布局Layout
PyQt的QHBoxLayout、QVBoxLayout 与QGridLayout三种布局的区别:
(1)QHBoxLayout 类将各部件水平排列
(2) QVBoxLayout 类将各部件垂直排列
(3) QGridLayout类将各个widget(部件)按grid(网格)排列。
先介绍 Dumb Dialogs。也就是比较傻瓜式的对话框,看一个例子:我们要设计一个简单的字体设置对话框,要求可选择字体,和设置字体大小。
我们要设计一个简单的字体设置对话框,要求可选择字体,和设置字体大小。
#!/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(buttonLayout)
self.setLayout(layout)
#窗口标题
self.setWindowTitle(u"字体")
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
font= FontPropertiesDlg()
font.show()
app.exec_()
运行结果如下:
这里用到了两个 layout 一个是 buttonlayout,一个 layout,其中的buttonlayout是放到了 layout上。
buttonLayout = QHBoxLayout()
buttonLayout.addStretch()
buttonLayout.addWidget(okButton)
buttonLayout.addWidget(cancelButton)
button是水平放置的,QHBoxLayout,而且用到了 Stretch,也就是说这里的确定和取消按钮虽然是水平放置的,但是由于 stretch的作用,两个按钮会靠右放置,而且随着窗口大小的改变,也是靠右边的,如上图。(如果把上面第二句去掉的话,两个按钮的显示就变了,左右平局分布)。