两个例子认识PyQt5
写在前面
我使用的是anaconda自带的编辑器Spyder,本专栏的所有的代码都是使用Spyder编辑的。由于安装anaconda的时候,会自动安装PyQt5的包,所以这里就不介绍PyQT5的安装。
纯代码创建一个简答的GUI程序
1、创建项目
源代码如下:
import sys
from PyQt5 import QtCore,QtGui,QtWidgets
#创建app,用QApplication类
app = QtWidgets.QApplication(sys.argv)
#创建窗体
widgetHello = QtWidgets.QWidget()
#设置窗体的宽度和高度
widgetHello.resize(280,150)
#设置窗体的标题文字
widgetHello.setWindowTitle("Demo1")
#创建标签,父容器为widgetHello
LabHello = QtWidgets.QLabel(widgetHello)
#设置标签文字
LabHello.setText("Hello World,PyQt5")
#创建字体对象font
font = QtGui.QFont()
#设置字体大小
font.setPointSize(12)
#设置为粗体
font.setBold(True)
#设置标签labHello的字体
LabHello.setFont(font)
#获取LabHello的合适大小,返回值是QSize类对象
size=LabHello.sizeHint()
#设置LabHello在窗体中的位置为(70,60),大小为Size
LabHello.setGeometry(70,60,size.width(),size.height())
#显示对话框
widgetHello.show()
#应用程序运行
sys.exit(app.exec_())
运行结果如下:
可视化设计窗体的GUI程序
一、在Qt Creator中创建窗体
1、点击菜单项“File”——“New File or Project…”,选择“Qt”分组里的“Qt Designer From”,创建一个单纯的窗体文件(.ui文件)
2、选择Widget模板。
Dialog模板,基于QMainWindow类的窗体,具有主窗体的特性,如可以模态显示、具有返回值等。
Main Window模板,基于QMainWindow类的窗体,具有主窗体的特性,窗口上有主菜单栏、工具栏、状态栏等。
Widget模板,基于QWidget类的窗体。QWidget类是所有界面组件的基类,如QLabel、QPushButton等界面组件都是从QWidget类继承而来的。QWidget类也是QDialog和QMainWindow的父类,基于QWidget类创建的窗体可以作为独立的窗体运行,也可以嵌入到其他界面组件内显示。
4、设置文件名为FormHello.ui,文件保存在python项目目录下。
5、在窗体上添加一个QPushButton、QLabel控件,控件属性如表所示:
objectName | 类名称 | 属性设置 | 备注 |
---|---|---|---|
FormHello | QWidget | windowTile = “Demo” | 设置窗体的标题栏显示文字 |
btnClose | QPushButton | Text =“关闭” | 设置按钮的显示文字 |
LabHello | QLabel | Text=“Hello,by UI Design” Font.PointSize = 12 Font.bold=True | 设置标签显示文字和字体 |
6、将.ui文件编译为py文件
打开“Anaconda Prompt”,进入.ui文件所在的目录,输入指令,将FormHello.ui文件转换为ui_FormHello.py文件
pyuic5 -o ui_FormHello.py Formhello.ui
6、编写.py程序调用ui_FormHello.py生成窗体。
import sys
from PyQt5 import QtWidgets
import ui_FormHello
#创建应用程序实例app
app = QtWidgets.QApplication(sys.argv)
#创建一个基础的窗体
baseWidget = QtWidgets.QWidget()
#使用ui_FormHello模块中的ui_FormHello创建一个对象ui
ui = ui_FormHello.Ui_FormHello()
#调用ui_Formhello类中的setupUi()函数
ui.setupUi(baseWidget)
#显示窗体
baseWidget.show()
#ui.LabHello.setText("Hello,被程序修改")#可以修改窗体上标签的文字
#应用程序运行
sys.exit(app.exec_())
7、运行结果