热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python开发图形界面工具_学会这一招,图形界面编程不再复杂,Python工具PyCharm使用技巧...

上一篇内容我们使用PyQt5构造了一个GUI程序的通用框架(图形界面编程技巧,用Python中PyQt5库快速创建一个应用程序框架)。这样

上一篇内容我们使用PyQt5构造了一个GUI程序的通用框架(图形界面编程技巧,用Python中PyQt5库快速创建一个应用程序框架)。这样的图形用户接口相对来说比较简单。我们知道,日常使用的图形界面都是比较复杂的。

aa64034f78f0f736e4a181e69e7f931feac413ae.jpeg?token=9bfd28ae9f367f21b5b600ca90ec449d&s=BDB0C4114E564255422251AD03003022轻松睡大觉?

比如,一个应用程序中可能有很多图形接口供用户来使用。常见的菜单栏、工具栏、状态栏都没有在我们的框架中定义。

caef76094b36acafc564424af6f3ad1600e99cb5.jpeg?token=df4eaad83fa4800050c8faa875cdbebc&s=6F241D639EDCC4905E1521D60000E0A1醒醒吧,还有很长的路要走

今天,带大家了解一个功能更加丰富的GUI应用程序框架。

源代码

不赘述了,直接上代码

63d9f2d3572c11df3e6e6defe90d42d6f603c274.jpeg?token=d9de3531f37c585ca079b2acd8d39fd7&s=3C974A960AE1B0C25C835FBF0300F00E开启代码模式

#!/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_())

为方便大家测试,程序截图如下

bf096b63f6246b60fa5a2f7c61d23a4a510fa217.jpeg?token=6c8b75d1d80ecdacce6474ae74fdd43d&s=E0C2B5455AE4B36C4EC9640F0000F0C1代码缩进结构

8435e5dde71190efc8eb85d84431bd10fdfa6051.jpeg?token=0254c0654b28978efca630c9cd0a5408&s=A8C2B544CEA6F3740CE14C0F0000E0C0使用自定义类创建GUI程序

使用时,大家讲函数内容粘贴到相应的位置即可。

结果展示

上面代码我们得到了如下图所示的GUI应用程序框架。

fc1f4134970a304ebbe2fb995be28780c8175c45.jpeg?token=08c120607147db858d502388b2e9a51c&s=003055324B63452442F504DA0000D0B2运行结果

功能很齐全,不是吗?标题、菜单栏、工具栏、状态栏都有。想制作自己的GUI程序界面,直接修改相应的内容即可。

b3b7d0a20cf431ad40314c7ac61c8ca92fdd9846.jpeg?token=ba51c1bae95aae4de7689e7b8ee8a495&s=40342573E8E9468E784DA9CF0300A0A0自己的工具包:方便高效

有什么用

上面的代码有什么用呢?

简化输入代码

我们知道,PyCharm中有个很强大的功能叫live template模板,可使用简短的输入来代替大量代码的录入。(参见还在使用PyCharm一行行敲代码吗?使用这个方法让你节省一半时间),你可以将上述代码制作成一个live template模板,以后创建自己的GUI应用程序时,你就拥有了自己的工具包……想想都很酷。

e4dde71190ef76c62206933f143cddfcae5167fa.jpeg?token=3fe40324993ea9d02d1d07f7d59a7f09&s=590435725301734741E04DEE0100E022简单即是高效

代码更易读、易理解

这样封装之后的代码,更加容易理解,在创建各个控件时,我们使用了相应的方法。如果你想扩展自己的程序功能,只需要修改相应的方法即可。

8b82b9014a90f6034d51883fbd30911db151ed89.jpeg?token=3863c942e8055d58b0ea75feadd8f33a&s=14B2FFB0160214EE048C483603005042更易读

应用程序更容易扩展

代码这样封装,使得业务逻辑和界面做到了分离(本程序并没有分离彻底,但作为示例,为了帮助大家理解,所以没有进行彻底分割)。大家在实际应用中可以将上面的内容进行合理的调整。

9f2f070828381f30303f216d212b6c0e6f06f085.jpeg?token=6fca3293f53b9700e2d21c4da12d76ab&s=9A33C0012480F0F85C9D1D870300A090未来可扩展

live template效果展示

32fa828ba61ea8d32eda77591e201048241f58a7.jpeg?token=c8a524e1aac6e2d834b214163149d7b6&s=8F84A44C9AA7876C0CE1340D0000E0C0定义live template模板

此时,在编辑器中输入qtmw,按下回车键后,这串100多行的代码就自动进行了输入,输入程序标题和窗口大小后,运行看下结果,怎么样?我们不到一分钟的时间创建了这么一个复杂的GUI应用程序,是不是很有成就感?

bba1cd11728b4710a2f7cb884ae4e3fbfd03234d.jpeg?token=85d97e7f792c1c7b0da8911aaa2cb718&s=3F184B81DC338084C68165300300C090或许成就感是这样的

好了,今天的内容就到这里了,小伙伴们这项技能你Get到了吗?

需要源码的小伙伴关注并私信我,我将源代码发给你,以后就不用一行一行敲代码了……

喜欢Python编程的小伙伴一定要关注我哦,后续会推出一些更有意思的实战内容。

转载请注明出处,百家号:Python高手养成



推荐阅读
author-avatar
zmhua123_681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有