赞
踩
GUI是Graphical User Interface(图形用户界面)的缩写
在GUI中,并不只是键入文本和返回文本,用户可以看到窗口、按钮、文本框等图形,而且可以用鼠标点击,还可以通过键盘键入。
GUI是与程序交互的一种不同的方式。
目前为止的程序都是命令行或文本模式程序
GUI的程序仍然有3个基本要素:输入、处理和输出
第一步:安装python
第二步:安装PyQt5-sip
sip是RiverBank(也就是PyQt的开发商)开发的用于PyQt的Python/C++混合编程解决方案。作为Python Module的PyQt,
依赖于作为Python Module的sip。
第三步:安装PyQt5
测试是否安装成功
之后在任意目录中新建一个.py文件,在该文件中输入以下代码
然后保存,运行,出现窗体,表示成功
PyQt5 API拥有620多个类和6000个函数。它是一个跨平台的工具包,可以运行在所有主流的操作系统上,包括Windows、Linux和Mac OS
QObject类:在类层次结构中是顶部类(Top Class),它是所有PyQt对象的基类。
QPaintDevice类:所有可绘制的对象的基类。
QApplication类:用于管理图形用户界面应用程序的控制流和主要设置。它包含主事件循环,对来自窗口系统和其他资源的所有事件进行处理和调度;它也对应用程序的初始化和结束进行处理,并且提供对话管理;还对绝大多数系统范围和应用程序范围的设置进行处理。
QWidget类:所有用户界面对象的基类。QDialog类和QFrame类继承自QWidget类,这两个类有自己的子类系统(Sub-Class System)。
QFrame类:有框架的窗口控件的基类。它也被用来直接创建没有任何内容的简单框架,但是通常要用到QHBox或QVBox,因为它们可以自动布置放到框架中的窗口控件。
QMainWindow类:提供一个有菜单栏、锚接窗口(如工具栏)和状态栏的主应用程序窗口。
QDialog类:最普通的顶级窗口。如果一个窗口控件没有被嵌入到父窗口控件中,那么该窗口控件就被称为顶级窗口控件。在通常情况下,顶级窗口控件是有框架和标题栏的窗口。在Qt中,QMainWindow和不同的QDialog的子类是最普通的顶级窗口
QWidget是所有用户界面类的基类,它能接收所有的鼠标、键盘和其他系统窗口事件。没有被嵌入到父窗口中的Widget会被当作一个窗口来调用,当然,它也可以使用setWindowFlags(Qt.WindowFlags)函数来设置窗口的显示效果。QWidget的构造函数可以接收两个参数,其中第一个参数是该窗口的父窗口;第二个参数是该窗口的Flag,也就是Qt.WindowFlags。根据父窗口来决定Widget是嵌入到父窗口中还是被当作一个独立的窗口来调用,根据Flag来设置Widget窗口的一些属性。
QMainWindow(主窗口)一般是应用程序的框架,在主窗口中可以添加所需要的Widget,比如添加菜单栏、工具栏、状态栏等。主窗口通常用于提供一个大的中央窗口控件(如文本编辑或者绘制画布)以及周围的菜单栏、工具栏和状态栏。QMainWindow常常被继承,这使得封装中央控件、菜单栏,工具栏以及窗口状态变得更容易,也可以使用Qt Designer来创建主窗口。
QApplicationQApplication类用于管理图形用户界面应用程序的控制流和主要设置,可以说QApplication是PyQt的整个后台管理的命脉。任何一个使用PyQt开发的图形用户界面应用程序,都存在一个QApplication对象。在PyQt的应用程序实例中包含了QApplication类的初始化,通常放在Python脚本的if name == "main": 语句后面,类似于放在C的main函数里,作为主程序的入口。因为QApplication对象做了很多初始化,所以它必须在创建窗口之前被创建。ØQApplication类还可以处理命令行参数,在QApplication类初始化时,需要引入参数sys.argv。sys.argv是来自命令行的参数列表,Python脚本可以从shell运行,比如用鼠标双击qtSample.py,就启动了一个PyQt应用程序。引入sys.argv后就能让程序从命令行启动,比如在命令行中输入 python qtSample.py,也可以达到同样的效果。QApplication采用事件循环机制,当QApplication初始化后,就进入应用程序的主循环(Main Loop),开始进行事件处理,主循环从窗口系统接收事件,并将这些事件分配到应用程序的控件中。当调用sys.exit()函数时,主循环就会结束。PyQt 5的应用程序是事件驱动的,比如键盘事件、鼠标事件等。在没有任何事件的情况下,应用程序处于睡眠状态。主循环控制应用程序什么时候进入睡眠状态,什么时候被唤醒。
程序指定了组件的位置并且每个组件的大小用像素作为单位来丈量。当你使用了绝对定位,我们需要知道下面的几点限制:
如果我们改变了窗口大小,组件的位置和大小并不会发生改变。
在不同平台上,应用的外观可能不同
改变我们应用中的字体的话可能会把应用弄得一团糟。
如果我们决定改变我们的布局,我们必须完全重写我们的布局,这样非常乏味和浪费时间。
一、控件分类
1、窗口类 2、布局控件 3、高级界面控件
二、基本控件
1、标签控件 2、文本框类控件 3、按钮类控件
4、下拉列表框 5、表格控件 6、时间控件
三、什么是信号和槽
四、内置信号和槽函数
五、内置信号和自定义槽函数
六、自定义信号和内置槽函数
七、自定义信号和槽函数
如果是主窗口,用QmainWindow类;
如果是对话框,就用Qdialog类;
如果不确定,或者可能是顶层窗口,也可能嵌入其他窗口,那就用Qwidget类。
QWidget、QMainWindow、QDialog和QFrame的区别,特别是QWidget和QFrame的区别
PyQt中所有的类都继承于QObject类。QWidget直接继承于QPaintDevice类,QDialog、
QMainWindow、QFrame直接继承QWidget 类。QWidget类是所有用户界面对象的基类。
QDialog类是对话框窗口的基类。QFrame类是有框架的窗口部件的基类,比如:
QPushButton,QLabel… ---> QFrame ---> QWidget。
(一) QmainWindow:主窗口类通常用于创建主窗口,它继承自Qwidget类,拥有它的所派生方法和属性。(二) QWidget:控件类它是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。(三) Qdialog:对话框窗口类QMessageBox : 消息弹出式对话框QInputDialog : 输入对话框继承关系:QMessageBox、QFileDialog、QFontDialog、QInputDialog --->Qdialog
(一)QBoxLayout :框布局继承关系:QHBoxLayout、QVBoxLayout ---> QBoxLayout ---> QLayout ---> Qobject1、QHBoxLayout :水平布局按照从左到右的顺序来添加控件2、QVBoxLayout :垂直布局按照从上到下的顺序来添加控件(二)QGridLayout :网格布局将窗口分隔成行和列的网格来进行排列。(三)QFormLayout :表单布局继承关系: QFormLayout ---> QLayout ---> QObject实现表单式的布局,由两列组成,第一列用于显示信息,给用户提示,一般叫label域;第二列需要用户进行选择或输入,一般叫field域。 。(四)Qsplitter可以动态地拖动子控件之间的边界来控制子控件的大小,是一个动态布局管理器
PyQt5中有4种布局方式:水平布局、垂直布局、网格布局、表单布局PyQt5中有2种布局方法:addLayout()、addWidget()
(一)表格与树:QTableViewQTableView控件可以绑定一个模型数据用来更新控件上的内容QListViewQListView类用于展示数据QListWidget是一个基于条目的接口,用于从列表中添加或删除条目。每一个条目对象都是QListWidgetItem对象QTableWidget是Qt程序中常用的显示数据表格的空间QTreeViewQTreeView类实现树形结构,树形结构是通过QTreeWidgetQ和TreeWidgetItem类实现的,其中TreeWidgetItem类实现树形节点的添加
(二)容器:装载更多的控件它是所用于解决一个窗口装载不下或装载太多控件而不美观的问题QTabWidget:选项卡控件提供一个选项卡和一个页面区域,默认显示第一个选项卡QStackedWidget:堆栈窗口控件是一个堆栈窗口控件,可以填充一些小控件,但同一时间只有一个小控件可以显示。
QStackedWidget使用QStackedLayout布局。QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或者在指定位置作为子窗口附加到主窗口中QScrollBar提供水平或垂直的滚动条,这样可以扩大当前窗口的有效装载面积,从而装载更多的控件。
1、QLabel:标签类
可用于显示不可编辑的文本和图片,也可以放置一个GIF动画,还可以用于提示标记为其他控件。纯文本、链接、富文本可显示的标签上
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信号,如果想在它状态改变时触发相应的行为,请连接这个信号。
定义:用来显示不可编辑的文字或图片,或GIF动画。也可用作其他控件的占位符。纯文本、超链接或富文本都可以显示在这个Label上。
QLineEdit : 单行文本框控件
最常使用的输入框,可供输入一行文字。输入多行文字时需要使用QTextEdit
按钮QPushButton
显示一个按钮,当点击时可以通过编程来调用一个确定的函数。
单选框QRadioButton
显示一个带有文字标签的可选按钮,可在表单中选择某一个选项,是单选按钮。该类派生自QAbstractButton。单选按钮默认是排他的,即一次只能选择一个选项。可以把Radio Button放入QGroupBox或QButtonGroup中以创建更多可选的选项。
复选框QCheckBox
文字标签之前的矩形框,是多选按钮。
多选按钮默认是不排他的,如果想要手动排他,需要将这些复选框放入QButtonGroup中。
QComboBox是一个集按钮和下拉选项于一体的控件
QTableWidget是pyqt的一个表格类,每个一个格子是一个Item值。我们可以用循环将读取的表格写入QTableWidget中
QCoQCalendarWidget类提供了一个基日历小部件,允许用户选择一个日期
信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。
通过该机制可以很好的将组件的信号(如button的clocked、toggled、pressed等)和处理该信号的槽关联起来。
信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,signal会被emit出来,slot调用是用来响应相应的signal的。Qt中对象已经包含了许多预定义的 signal(基本组件都有各自特有的预定义的信号),根据使用的场景我们可以添加新的signal。Qt的对象中已经包含了许多预定义的槽函数,但我们也根据使用的场景添加新的槽函数。
信号
当对象的状态发生改变的时候,信号就由该对象发射 (emit) 出去。当一个信号被发射(emit)时候,与其关联的槽函数被立刻执行。其中该对象只负责发送信号,发射该信号的对象并不知道是那个对象在接收这个信号。这样保证了对象与对象之间的低耦合。 如果存在信号和多个槽函数相关联的时候,当信号被发射时,这些槽的执行顺序将会是随机的、不确定的
槽
用于接受信号,而且槽只是普通的对象成员函数。当和槽连接的信号被发射时,槽会被调用。一个槽并不知道是否有任何信号与自己相连接。
信号和槽的绑定
通过调用 QObject 对象的 connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用
当信号与槽没有必要继续保持关联时,我们可以使用 disconnect 函数来断开连接
内置信号与槽的使用,是指在发射信号时,使用窗口控件的函数,而不是自定义的函数,这种也是我们前面用的最多的
内置信号与自定义槽函数的使用,是指在发射信号时,使用自定义的函数。
PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义信号。可以使用pyqtSignal()方法定义新的信号,新的信号作为类的属性。
PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义信号。可以使用pyqtSignal()方法定义新的信号,新的信号作为类的属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。