上一篇内容我们使用PyQt5构造了一个GUI程序的通用框架(图形界面编程技巧,用Python中PyQt5库快速创建一个应用程序框架)。这样的图形用户接口相对来说比较简单。我们知道,日常使用的图形界面都是比较复杂的。
轻松睡大觉?
比如,一个应用程序中可能有很多图形接口供用户来使用。常见的菜单栏、工具栏、状态栏都没有在我们的框架中定义。
醒醒吧,还有很长的路要走
今天,带大家了解一个功能更加丰富的GUI应用程序框架。
源代码
不赘述了,直接上代码
开启代码模式
#!/usr/bin/env python
# coding:utf-8
import sys
from PyQt5.Qt import *
from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget, QWidget
from PyQt5.QtWidgets import QHBoxLayout, QPushButton, QTextEdit, QAction, QToolBar
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self, parent=None, *args, **kwargs):
super(MainWindow, self).__init__(parent, *args, **kwargs)
self.initUI()
def initUI(self):
# 窗体设置
self.setWindowTitle('PyQt MainWindow示例')
self.setWindowIcon(QIcon('icon\\main.png'))
self.resize(800, 600)
# 创建一个Action(范例,其他Acion参照这个)
self.createActions()
# 顶部菜单栏
self.createMenuBar()
# 次顶部工具栏
self.createToolBar()
# 创建状态栏
self.createStatusBar()
# 创建主工作区
self.createMainUI()
# 窗体居中
self.center()
# 创建主工作区
def createMainUI(self):
self.qtextEdit = QTextEdit()
layout = QHBoxLayout()
layout.addWidget(self.qtextEdit)
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
# 创建菜单栏
def createMenuBar(self):
self.menu = self.menuBar()
file = self.menu.addMenu('文件')
file.addAction(self.newAction)
file.addAction(self.openAction)
file.addAction(self.exitAction)
tool = self.menu.addMenu('编辑')
tool.addAction(self.copyAction)
tool.addAction(self.pasteAction)
tool.addAction(self.cutAction)
helps = self.menu.addMenu('帮助')
helps.addAction(self.helpAction)
# 创建工具栏
def createToolBar(self):
self.toolBar = QToolBar()
self.addToolBar(Qt.LeftToolBarArea,self.toolBar)
self.toolBar.addAction(self.exitAction)
self.toolBar.addAction(self.openAction)
self.toolBar.addAction(self.copyAction)
self.toolBar.addAction(self.pasteAction)
self.toolBar.addAction(self.cutAction)
# 创建状态栏
def createStatusBar(self):
self.status = self.statusBar()
self.status.showMessage('这是状态栏提示信息', 0)
# 创建Action
def createActions(self):
# 退出程序
self.exitAction = QAction(QIcon('icon\\exit.png'), '退出', self)
self.exitAction.setShortcut('Ctrl+Q')
self.exitAction.setStatusTip('退出程序')
self.exitAction.triggered.connect(self.close)
# 打开文件
self.openAction = QAction(QIcon('icon\\open.png'), '打开', self)
self.openAction.setShortcut('Alt+O')
self.openAction.setStatusTip('打开文件')
self.openAction.triggered.connect(self.open)
# 新建文件
self.newAction = QAction(QIcon('icon\\new.png'), '新建', self)
self.newAction.setShortcut('Alt+N')
self.newAction.setStatusTip('新建文件')
self.newAction.triggered.connect(self.new)
# 复制
self.copyAction = QAction(QIcon('icon\\copy.png'), '复制', self)
self.copyAction.setShortcut('Ctrl+C')
self.copyAction.setStatusTip('复制内容')
self.copyAction.triggered.connect(self.copy)
# 粘贴
self.pasteAction = QAction(QIcon('icon\\paste.png'), '粘贴', self)
self.pasteAction.setShortcut('Ctrl+V')
self.pasteAction.setStatusTip('粘贴内容')
self.pasteAction.triggered.connect(self.paste)
# 剪切
self.cutAction = QAction(QIcon('icon\\cut.png'), '剪切', self)
self.cutAction.setShortcut('Ctrl+X')
self.cutAction.setStatusTip('剪切内容')
self.cutAction.triggered.connect(self.cut)
# 帮助
self.helpAction = QAction(QIcon('icon\\help.png'), '关于', self)
self.helpAction.setShortcut('Alt+H')
self.helpAction.setStatusTip('单击获取帮助信息')
self.helpAction.triggered.connect(self.helps)
# 窗口位置居中
def center(self):
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) // 2,
(screen.height() - size.height()) // 2)
def open(self):
print('打开文件')
def new(self):
print('新建文件')
def copy(self):
print('复制内容')
def paste(self):
print('粘贴内容')
def cut(self):
print("剪切内容")
def helps(self):
print('帮助信息')
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon('icon.png'))
form = MainWindow()
form.show()
sys.exit(app.exec_())
为方便大家测试,程序截图如下
代码缩进结构
使用自定义类创建GUI程序
使用时,大家讲函数内容粘贴到相应的位置即可。
结果展示
上面代码我们得到了如下图所示的GUI应用程序框架。
运行结果
功能很齐全,不是吗?标题、菜单栏、工具栏、状态栏都有。想制作自己的GUI程序界面,直接修改相应的内容即可。
自己的工具包:方便高效
有什么用
上面的代码有什么用呢?
简化输入代码
我们知道,PyCharm中有个很强大的功能叫live template模板,可使用简短的输入来代替大量代码的录入。(参见还在使用PyCharm一行行敲代码吗?使用这个方法让你节省一半时间),你可以将上述代码制作成一个live template模板,以后创建自己的GUI应用程序时,你就拥有了自己的工具包……想想都很酷。
简单即是高效
代码更易读、易理解
这样封装之后的代码,更加容易理解,在创建各个控件时,我们使用了相应的方法。如果你想扩展自己的程序功能,只需要修改相应的方法即可。
更易读
应用程序更容易扩展
代码这样封装,使得业务逻辑和界面做到了分离(本程序并没有分离彻底,但作为示例,为了帮助大家理解,所以没有进行彻底分割)。大家在实际应用中可以将上面的内容进行合理的调整。
未来可扩展
live template效果展示
定义live template模板
此时,在编辑器中输入qtmw,按下回车键后,这串100多行的代码就自动进行了输入,输入程序标题和窗口大小后,运行看下结果,怎么样?我们不到一分钟的时间创建了这么一个复杂的GUI应用程序,是不是很有成就感?
或许成就感是这样的
好了,今天的内容就到这里了,小伙伴们这项技能你Get到了吗?
需要源码的小伙伴关注并私信我,我将源代码发给你,以后就不用一行一行敲代码了……
喜欢Python编程的小伙伴一定要关注我哦,后续会推出一些更有意思的实战内容。
转载请注明出处,百家号:Python高手养成