因为想把python实现的功能做个界面程序,学习一下PyQt
参考资料:https://maicss.gitbook.io/pyqt-chinese-tutoral/pyqt5/hello_world
这个文档第一节一共有六个例子,我把他们都写在一起,代码和注释如下
先放运行效果:
from PyQt5.QtWidgets import QApplication,QWidget,QToolTip,QPushButton,QMessageBox,QDesktopWidget
from PyQt5.QtGui import QIcon,QFont#创建应用图标
#构造一个 Qt core 应用程序。core 应用程序是没有图形用户界面的应用程序。此类应用程序用于控制台或服务器进程。
from PyQt5.QtCore import QCoreApplication
import sys
#过程式编程,这是第一个小例子,后面不会用到了
def firstapp():
app=QApplication(sys.argv)#控制脚本开始运行的方式,sys.argv提供命令行的一些参数,这样python脚本就能从shell运行
window=QWidget()#采用默认构造,没有父对象的widget也就是window窗体
window.setWindowTitle('linan first app')#加标题,标题在标题栏展示
window.resize(300,300)#设置窗口大小
window.show()#让窗口从内存显示到屏幕中,窗口是在内存中创建出来的,
sys.exit(app.exec_())#exec是python关键字,所以qt的函数加了underscore
#面向对象的方法
class Apptest(QWidget):
def __init__(self):#构造函数,实例初始化
#调用了两个构造器,一个是这个类本身的,一个是这个类继承的
super().__init__()#super()构造器方法返回父级的对象
self.initUI()#每个对象创建后都会执行这个函数
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
btn = QPushButton('按钮', self)#第一个参数是按钮的文本,第二个参数是按钮的父级组件
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)
qbtn = QPushButton('Quit', self)
#QCoreApplication包含了事件的主循环,它能添加和删除所有的事件,instance()创建了一个它的实例。
#QCoreApplication是在QApplication里创建的。 点击事件和能终止进程并退出应用的quit函数绑定在了一起。
# 在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。
qbtn.clicked.connect(QCoreApplication.instance().quit)#用于退出程序的按钮,用到了信号和槽
qbtn.resize(qbtn.sizeHint())
qbtn.move(150, 50)
#调用setTooltip()创建提示框可以使用富文本格式的内容
self.setToolTip('This is a <b>QWidget</b> widget')#<b>加粗文本
self.setGeometry(300, 300, 300, 220)#相当于resize和move方法的合体
self.setWindowTitle('带Icon的窗体')
self.center()#自定义的函数,把窗口挪到中间
self.show()
#消息盒子
def closeEvent(self, event):
#参数按顺序分别是(忽略self),标题栏显示的信息,对话框内显示的信息
# 消息框内的两个按钮,默认选中的按钮(可以看到这里默认选否)
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()#点击是 则退出程序,接受该信号(退出程序)
else:
event.ignore()#点击否 忽略该信号
#程序放在屏幕中央
def center(self):
qr = self.frameGeometry()#获得主窗口所在的框架。
#QDesktopWidget提供了用户的桌面信息,包括屏幕的大小。
cp = QDesktopWidget().availableGeometry().center()#获取显示器的分辨率,然后得到屏幕中间点的位置。
print(cp)
#通过move函数把主窗口的左上角移动到其框架的左上角,这样就把窗口居中了。
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Apptest()
app.setWindowIcon(QIcon('app.ico'))
sys.exit(app.exec_())