一、窗口控件
- 如果是主窗口,用QmainWindow类;
- 如果是对话框,就用Qdialog类;
- 如果不确定,或者可能是顶层窗口,也可能嵌入其他窗口,那就用Qwidget类。
另外,注意QWidget、QMainWindow、QDialog和QFrame的区别,特别是QWidget和QFrame的区别:
PyQt中所有的类都继承于QObject类。QWidget直接继承于QPaintDevice类,QDialog、QMainWindow、QFrame直接继承QWidget 类。QWidget类是所有用户界面对象的基类。 QDialog类是对话框窗口的基类。QFrame类是有框架的窗口部件的基类,比如:QPushButton,QLabel… ---> QFrame ---> QWidget。本文中符号“---> ”表示“继承于”的意思。
详细区别请看:
QWidget、QMainWindow、QDialog和QFrame的区别
QFrame与QWidget的区别
QFrame类使用总结
(一) QmainWindow:主窗口类
通常用于创建主窗口,它继承自Qwidget类,拥有它的所派生方法和属性。
(二) QWidget:控件类
它是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
1、QLabel:标签类
- 可用于显示不可编辑的文本和图片,也可以放置一个GIF动画,还可以用于提示标记为其他控件。纯文本、链接、富文本可显示的标签上。
- 继承关系:
QLabel ---> QFrame ---> QWidget
2、文本框类控件:QLineEdit、QTextEdit
① QLineEdit : 单行文本框控件
用于输入单行字符串。
② QTextEdit : 多行文本框控件
可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条。还可显示HTML文档。
3、 按钮类控件 : QAbstractButton、QPushButton、QRadioButton、QCheckBox
① QAbstractButton : 按钮基类
是按钮的基类,QPushButton、QRadioButton、QCheckBox均继承于 QAbstractButton,它是抽象类,不能实例化。
②QPushButton : 命令按钮
是长方形,通过单击该按钮或用快捷键来执行一些命令,该命令通常通过文本来描述执行的动作。
③ QRadioButton : 单选按钮
- 提供一组可供选择的按钮和文本标签,用户可选择其中一选项,标签用于显示对应的文本信息。它是一种形状按钮,可以切换为on或off,即checked和unchecked。
- toggled信号是在切换单选钮状态时发射的,而clicked信号则在每次点击时都会发射,所以toggled信号更适合用于状态监控,绑定这个信号,在按钮状态改变时,触发相应行为。
④ QCheckBox : 复选框按钮
- 提供了一组带文本标签的复选框,用户怕树叶子打破头选择多个选项。
- 它被选中或取消选中,都会发射一个stateChaged信号,如果想在它状态改变时触发相应的行为,请连接这个信号。
4、QComboBox : 下拉列表框
是一个集按钮和下拉选项于一体的控件。
5、QSpinBox : 计数器
- 是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,也可以输入值。
- 继承关系:QSpinBox 、QDoubleSpinBox ---> QAbstractSpinBox。QSpinBox用于数理整数值,QDoubleSpinBox用于处理浮点值。
- 可用valueChanged信号连接槽,可通过value()函数获得计数器的当前值。
6、QSlider : 滑动条
- 提供一个垂直或水平的滑动条,是用于控制有界值的典型控件,它允许用户在某一范围内移动滑块,并将滑块所在的位置置换成一个合法范围内的整数值。
7、窗口绘图类控件:QPainter、QPen、QBrush、QPixmap
① QPainter : 绘制点、文字
- 在QWidget控件上执行绘图操作,可以绘制简单的直线到复杂的饼图,执行较低级别的图形绘制功能。
② QPen : 钢笔
- 用于绘制直线、曲线、或给轮廓画出矩形、椭圆形、多边形及其他形状等
③ QBrush : 画刷
- 用于填充如矩形、椭圆形或多边形等形状。
④ QPixmap : 图像显示
- 用于绘图设备的图像显示,它可以作为一个QPaintDevice对象,也可以加载到一个控件中,通常是标签或按钮,用于在标签或按钮上显示图像。
8、拖曳与剪贴板:Drag、Drop、QClipboard
① DragEnterEvent、DropEvent : 拖曳
基于MIME类型的拖曳数据传输是基于QDrag类的。QMimeData对象将关联的数据与其对应的MIME类型相关联。互联网上的每一种资源都属于一种MIME类型的数据。
② QClipboard : 剪贴板
- 提供了对系统剪贴板的访问,可以在应用程序之间复制和粘贴数据
9、QCalendar :日历控件
提供一个基于月份的视图,通话用户通过鼠标或键盘选择日期,默认选中的是今天的日期。也可以对日历的日期范围进行规定。
10、QDateTimeEdit :日期时间控件
- 是一个允许用户编辑日期时间的控件,可以使用键盘和上、下箭头按钮来增加或减少日期时间值。
- 继承关系:QDateEdit、QTimeEdit ---> QDateTimeEdit ---> QAbstractSpinBox ---> QWidget
- 信号和槽函数: QDateTimeEdit 常用的信号是dateChanger、dateTimeChanged、timeChanged,分别在改变日期、日期时间、时间时发射。
11、菜单栏 :QMenuBar
12、工具栏 :QToolBar
13、状态栏 :QStatusBar
MainWindow对象在底部保留有一个水平条,作为状态栏,用于显示永久或临时的状态信息。
(三) Qdialog:对话框窗口类
继承关系:QMessageBox、QFileDialog、QFontDialog、QInputDialog --->Qdialog
1、QMessageBox : 消息弹出式对话框
- 用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。
2、QInputDialog : 输入对话框
- 由一个文本框和两个按钮(OK和Cancel)组成,当用户单击ok按钮后或按enter键后,父窗口可以收集通过QInputDialog控件输入的信息。
3、QFontDialog : 字体选择对话框
- 可以让用户选择所显示文本的字号大小、样式和格式。
4、QFileDialog : 打开保存文件对话框
- 用于打开和保存文件的标准对话框。
二、布局控件
- PyQt5中有4种布局方式:水平布局、垂直布局、网格布局、表单布局
- PyQt5中有2种布局方法:addLayout()、addWidget()
(一)QBoxLayout :框布局
继承关系:QHBoxLayout、QVBoxLayout ---> QBoxLayout ---> QLayout ---> QObject
1、QHBoxLayout :水平布局
按照从左到右的顺序来添加控件
2、QVBoxLayout :垂直布局
按照从上到下的顺序来添加控件
(二)QGridLayout :网格布局
- 将窗口分隔成行和列的网格来进行排列。
(三)QFormLayout :表单布局
- 继承关系: QFormLayout ---> QLayout ---> QObject
- 实现表单式的布局,由两列组成,第一列用于显示信息,给用户提示,一般叫label域;第二列需要用户进行选择或输入,一般叫field域。 。
(四)QSplitter
- 可以动态地拖动子控件之间的边界来控制子控件的大小,是一个动态布局管理器
三、高级界面控件
(一)表格与树:QTableView、QListView、QListWidget、QTableWidget、QTreeView
1、QTableView
- 继承关系:QTableWidget ---> QTableView ---> QAbstractItemView ---> QAbstractScrollArea ---> QFrame ---> QWidget
- QTableView控件可以绑定一个模型数据用来更新控件上的内容
2、QListView
- 继承关系:QListWidget ---> QListView
- QListWidget 是 QListView的子类,是升级版本的QListView。
- QListView类用于展示数据
3、QListWidget
- 是一个基于条目的接口,用于从列表中添加或删除条目。每一个条目对象都是QListWidgetItem对象。
4、QTableWidget
- 是Qt程序中常用的显示数据表格的空间
- 继承关系:QTableWidget ---> QTableView
5、QTreeView
- 继承关系:QTreeWidget ---> QTreeView ---> QAbstractItemView ---> QAbstractScrollArea ---> QFrame ---> QWidget
- QTreeView类实现树形结构,树形结构是通过QTreeWidgetQ和TreeWidgetItem类实现的,其中TreeWidgetItem类实现树形节点的添加。
(二)容器:装载更多的控件
- 用于解决一个窗口装载不下或装载太多控件而不美观的问题。
1、QTabWidget:选项卡控件
- 提供一个选项卡和一个页面区域,默认显示第一个选项卡
2、QStackedWidget:堆栈窗口控件
- 是一个堆栈窗口控件,可以填充一些小控件,但同一时间只有一个小控件可以显示。QStackedWidget使用使用QStackedLayout布局。
3、QDockWidget
- 是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或者在指定位置作为子窗口附加到主窗口中。
4、多文档界面:QMdiArea
- QMdiArea控件占据在主窗口的中央位置,子窗口在这个区域是QMdiSubWindow类的实例。
5、QScrollBar
- 提供水平或垂直的滚动条,这样可以扩大当前窗口的有效装载面积,从而装载更多的控件。
(三)多线程
1、QTimer:定时器
- 提供重复的和音效的定时器。
- 一般将timeout信号连接到相应的槽。
1、QThread
- 是Qt线程类中最核心的底层类,要使用QThread开始一个线程,可以创建它的一个子类,然后覆盖其QThread.run()函数。
- PyQt的线程使用方法:建立一个自定义的类,使它继承QThread,并实现其run()方法即可。
- QThread有started和finished信号,可以为这2个信号指定槽函数。