六、QComboBox(下拉列表框)
QComboBox是一个集按钮和下拉选项于一体的控件,也被称为下拉列表框。QComboxBox类中的常用方法如下:
addItem():添加一个下拉选项
addItems():从列表中添加下拉选项
Clear():删除下拉选项几何中的所有选项
count():返回下拉选项几何中的数目
currentText():返回选中选项的文本
itemText(i):获取索引为i的item的选项文本
currentIndex():返回选中项的索引
setItemText(int index,text):改变序号为index项的文本
QComboBox类中的常用信号:
Activated:当用户选中一个下拉选项是发射该信号
currentIndexChanged;当下拉选项的索引发生改变时发射该信号
highlighted:当选中一个已经选中的下拉选项时,发射该信号
完整演示代码:E:\testPyQt5\Chapter04\qt0411_QComboBox.py
七、QSpinBoX(计数器)
QSpinBox是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也可以输入值。
在默认情况下,QSpinBox的取值范围为0~99,每次改变的步长值为1.
QDoubleSpinBox和QSpinBox唯一的区别就是处理数据的类型不同,其他功能都基本相同。
QSpinBox类中的常用方法如下:
setMinimum():设置计数器的下界
setMaximum():设置计数器的商界
setRange():设置计数器的最大值、最小值和步长
setValue():设置计数器的当前值
Value():返回计数器的当前值
singleStep():设置计数器的步长值
每次单击向上/向下按钮时,QSpinBox计数器都会发射valueChanged信号,可以从相应的槽函数中通过value()函数获得计数器的当前值。
完整演示代码:E:\testPyQt5\Chapter04\qt0412_QSpinBox.py
八、QSlider(滑动条)
QSlider控件提供了一个垂直或水平的滑动条。
QSlider类中的常用方法如下:
setMinimum():设置滑动条控件的最小值
setMaximum():设置滑动条控件的最大值
setSingleStep():设置滑动条控件递增/递减的步长值
setValue():设置滑动条控件的值
value():获得滑动条控件的值
setTickInterval():设置刻度间隔
setTickPositon():设置刻度标记的位置,可以输入一个枚举值,这个枚举值指定刻度线相对于滑块和用户操作的位置。以下是可以输入的枚举值:
QSlider.NoTicks,不绘制任何刻度线
QSlider.TicksBothSlides,在滑块的两侧绘制刻度线
QSlider.TicksAbove,在(水平)滑块上方绘制刻度线
QSlider.TicksBelow,在(水平)滑块下方绘制刻度线
QSlider.TicksLeft,在(垂直)滑块左侧绘制刻度线
QSlider.TicksRight,在(垂直)滑块右侧绘制刻度线
QSlider类中常用信号如下:
valueChanged:当滑块的值发生改变时发射该信号,该信号时最常用的
sliderPressed:当用户按下滑块时发射次信号
sliderMoved:当用户拖动滑块时发射此信号
sliderReleased:当用户释放滑块时发射此信号
举例:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QSlider 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class SliderDemo(QWidget): | |
| def __init__(self, parent=None): | |
| super(SliderDemo, self).__init__(parent) | |
| self.setWindowTitle("QSlider 例子") | |
| self.resize(300, 100) | |
| layout = QVBoxLayout() | |
| self.l1 = QLabel("Hello PyQt5") | |
| self.l1.setAlignment(Qt.AlignCenter) | |
| layout.addWidget(self.l1) | |
| # 水平方向 | |
| self.sl = QSlider(Qt.Horizontal) | |
| #设置最小值 | |
| self.sl.setMinimum(10) | |
| #设置最大值 | |
| self.sl.setMaximum(50) | |
| # 步长 | |
| self.sl.setSingleStep( 3 ) | |
| # 设置当前值 | |
| self.sl.setValue(20) | |
| # 刻度位置,刻度在下方 | |
| self.sl.setTickPosition(QSlider.TicksBelow) | |
| # 设置刻度间隔 | |
| self.sl.setTickInterval(5) | |
| layout.addWidget(self.sl) | |
| # 连接信号槽 | |
| self.sl.valueChanged.connect(self.valuechange) | |
| self.setLayout(layout) | |
| def valuechange(self): | |
| print('current slider value=%s' % self.sl.value() ) | |
| size = self.sl.value() | |
| self.l1.setFont(QFont("Arial",size)) | |
| if __name__ == '__main__': | |
| app = QApplication(sys.argv) | |
| demo = SliderDemo() | |
| demo.show() | |
| sys.exit(app.exec_()) |
九、对话框类控件
1、QDialog
PyQt5中定义了一系列的标准对话框类,让使用者能够方便和快捷地通过各个类完成字号大小、字体颜色以及文件的选择等。QDialog类的子类主要有QMessageBox、QFileDialog、QFontDialog、QInputDialog等。QDialog类中的常用方法如下:
setWindowTitle():设置对话框标题
setWindowModality():设置窗口模态,取值如下:
Qt.NonModal,非模态,可以和程序的其他窗口交互
Qt.WindowModal,窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口进行交互
Qt.ApplicationModal,应用程序模态,阻止和任何其他窗口进行交互
QDialog的使用例子:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QDialog 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class DialogDemo( QMainWindow ): | |
| def __init__(self, parent=None): | |
| super(DialogDemo, self).__init__(parent) | |
| self.setWindowTitle("Dialog 例子") | |
| self.resize(350,300) | |
| self.btn = QPushButton( self) | |
| self.btn.setText("弹出对话框") | |
| self.btn.move(50,50) | |
| self.btn.clicked.connect(self.showdialog) | |
| def showdialog(self ): | |
| dialog = QDialog() | |
| btn = QPushButton("ok", dialog ) | |
| btn.move(50,50) | |
| dialog.setWindowTitle("Dialog") | |
| dialog.setWindowModality(Qt.ApplicationModal) | |
| dialog.exec_() | |
| if __name__ == '__main__': | |
| app = QApplication(sys.argv) | |
| demo = DialogDemo() | |
| demo.show() | |
| sys.exit(app.exec_()) |
运行结果如下
:
2、QMessageBox
ta是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十六进制数。
QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他功能是一样的。
QMessageBox类中的常用方法如下:
QMessageBox使用代码:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QMessage 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class WinForm( QWidget): | |
| def __init__(self): | |
| super(WinForm,self).__init__() | |
| self.setWindowTitle("QMessageBox 例子") | |
| self.resize(300, 100) | |
| self.myButton = QPushButton(self) | |
| self.myButton.setText("点击弹出消息框") | |
| self.myButton.clicked.connect(self.msg) | |
| def msg(self): | |
| # 使用infomation信息框 | |
| reply = QMessageBox.information(self, "标题", "对话框消息正文", QMessageBox.Yes | QMessageBox.No , QMessageBox.Yes ) | |
| print( reply ) | |
| if __name__ == '__main__': | |
| app= QApplication(sys.argv) | |
| demo = WinForm() | |
| demo.show() | |
| sys.exit(app.exec_()) |
运行效果如下:
3、QInputDialog
QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(ok按钮和cancel按钮)组成。当用户单击ok按钮或按enter键后,在父窗口可以收集通过QInputDialog控件输入的信息。常用方法如下
getInt():从控件中获得标准整数输入
getDouble():从控件中获得标准浮点数输入
getText():从控件中获得标准字符串输入
getItem():从控件中获得列表里的选项输入
例子:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QInputDialog 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class InputdialogDemo(QWidget): | |
| def __init__(self, parent=None): | |
| super(InputdialogDemo, self).__init__(parent) | |
| layout = QFormLayout() | |
| self.btn1 = QPushButton("获得列表里的选项") | |
| self.btn1.clicked.connect(self.getItem) | |
| self.le1 = QLineEdit() | |
| layout.addRow(self.btn1,self.le1) | |
| self.btn2 = QPushButton("获得字符串") | |
| self.btn2.clicked.connect(self.getIext) | |
| self.le2 = QLineEdit() | |
| layout.addRow(self.btn2,self.le2) | |
| self.btn3 = QPushButton("获得整数") | |
| self.btn3.clicked.connect(self.getInt) | |
| self.le3 = QLineEdit() | |
| layout.addRow(self.btn3,self.le3) | |
| self.setLayout(layout) | |
| self.setWindowTitle("Input Dialog 例子") | |
| def getItem(self): | |
| items = ("C", "C++", "Java", "Python") | |
| item, ok = QInputDialog.getItem(self, "select input dialog", | |
| "语言列表", items, 0, False) | |
| if ok and item: | |
| self.le1.setText(item) | |
| def getIext(self): | |
| text, ok = QInputDialog.getText(self, 'Text Input Dialog', '输入姓名:') | |
| if ok: | |
| self.le2.setText(str(text)) | |
| def getInt(self): | |
| num,ok = QInputDialog.getInt(self,"integer input dualog","输入数字") | |
| if ok: | |
| self.le3.setText(str(num)) | |
| if __name__ == '__main__': | |
| app = QApplication(sys.argv) | |
| demo = InputdialogDemo() | |
| demo.show() | |
| sys.exit(app.exec_()) |
运行结果:
4、QFontDialog
它是一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小、样式和格式。QFontDialog是QDialog标准对话框的一部分。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小、样式和格式
例:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QFontDialog 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class FontDialogDemo(QWidget): | |
| def __init__(self, parent=None): | |
| super(FontDialogDemo, self).__init__(parent) | |
| layout = QVBoxLayout() | |
| self.fontButton = QPushButton("choose font") | |
| self.fontButton .clicked.connect(self.getFont) | |
| layout.addWidget(self.fontButton ) | |
| self.fontLineEdit = QLabel("Hello,测试字体例子") | |
| layout.addWidget(self.fontLineEdit ) | |
| self.setLayout(layout) | |
| self.setWindowTitle("Font Dialog 例子") | |
| def getFont(self): | |
| font, ok = QFontDialog.getFont() | |
| if ok: | |
| self.fontLineEdit .setFont(font) | |
| if __name__ == '__main__': | |
| app = QApplication(sys.argv) | |
| demo = FontDialogDemo() | |
| demo.show() | |
| sys.exit(app.exec_()) |
运行结果:
5、QFileDialog
它是用于打开和保存文件的标准对话框。QFileDialog类继承自QDialog类。它在打开文件时使用了文件过滤器,用于显示指定扩展名的文件。也可以设置使用QFileDialog打开文件时的起始目录和指定扩展名的文件。它的常用方法:
getOpenFileName():返回用户所选择文件的名称,并打开该文件
getSaveFileName():使用用户选择的文件名并保存文件
setFileMode():可以选择的文件类型,枚举常量是 QFileDialog.AnyFile,任何文件 QFileDialog.ExistingFile,已存在的文件 QFleDialog.Directory ,文件目录 QFileDialog.ExistingFiles,已经存在的多个文件
setFilter():设置过滤器,只显示过滤器允许的文件类型
例子:
| # -*- coding: utf-8 -*- | |
| ''' | |
| 【简介】 | |
| PyQt5中 QFileDialog 例子 | |
| ''' | |
| import sys | |
| from PyQt5.QtCore import * | |
| from PyQt5.QtGui import * | |
| from PyQt5.QtWidgets import * | |
| class filedialogdemo(QWidget): | |
| def __init__(self, parent=None): | |
| super(filedialogdemo, self).__init__(parent) | |
| layout = QVBoxLayout() | |
| self.btn = QPushButton("加载图片") | |
| self.btn.clicked.connect(self.getfile) | |
| layout.addWidget(self.btn) | |
| self.le = QLabel("") | |
| layout.addWidget(self.le) | |
| self.btn1 = QPushButton("加载文本文件") | |
| self.btn1.clicked.connect(self.getfiles) | |
| layout.addWidget(self.btn1) | |
| self.contents = QTextEdit() | |
| layout.addWidget(self.contents) | |
| self.setLayout(layout) | |
| self.setWindowTitle("File Dialog 例子") | |
| def getfile(self): | |
| fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\',"Image files (*.jpg *.gif)") | |
| self.le.setPixmap(QPixmap(fname)) | |
| def getfiles(self): | |
| dlg = QFileDialog() | |
| dlg.setFileMode(QFileDialog.AnyFile) | |
| dlg.setFilter( QDir.Files ) | |
| if dlg.exec_(): | |
| filenames= dlg.selectedFiles() | |
| f = open(filenames[0], 'r') | |
| with f: | |
| data = f.read() | |
| self.contents.setText(data) | |
| if __name__ == '__main__': | |
| app = QApplication(sys.argv) | |
| ex = filedialogdemo() | |
| ex.show() | |
| sys.exit(app.exec_()) |
运行结果: