前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为你的 Python 程序写个启动工具箱

为你的 Python 程序写个启动工具箱

作者头像
用户2870857
发布2019-12-23 16:01:59
1.3K0
发布2019-12-23 16:01:59
举报
文章被收录于专栏:Python高效编程

到目前为止,公众号已经介绍了不少图形界面的软件,比如猜数游戏PDF阅读器贪吃蛇游戏天气查询软件等。为了方便他人使用,我们常把图形界面打包成 exe 文件。但是如果我们只是为了自己使用方便的话,我们有必要把程序打包成几十乃至上百兆的 exe 文件吗?没有必要。我们只要能够快速启动图形界面就可以了。下面我将介绍几种不需要打开 cmd 窗口就可以显示图形界面的方式。

Python 自带的方式

第一种方式就是直接改 py 文件后缀为 pyw,这样系统就会自动调用 pythonw.exe 来执行你的程序。这样你就不必忍受黑乎乎的 cmd 窗口,也不会因为关闭了 cmd 窗口连带着关闭了程序。

然后我们可以在桌面新建一个快捷方式,右键在属性里更改图标,这样我们就创建了一个图形界面的快捷启动方式。

批处理文件

第二种方式与第一种类似,也是通过 pythonw.exe 执行 pyw 文件,不过换成了 bat 批处理文件的形式,换汤不换药。

我们新建一个 txt 文件,在其中输入这样两行代码,并将其保存为 .bat 文件。start 后面的第一个字符串表示你的pythonw.exe 文件所在位置,一般在你的 Python 安装目录下面,和 python.exe 在同一目录。第二个字符表示你的 pyw 程序的地址,最好使用绝对地址。

代码语言:javascript
复制
@echo off
start  "D:\python372\pythonw.exe" "D:\\QQPCMgr\Desktop\Pytho高效编程\start.pyw" 

同样,你可以创建快捷方式,并更改图标。

用 Python 实现启动工具箱

下面,我将演示如何使用 PyQt5 实现一个启动工具箱。

主要实现了以下功能:

  • 通过工具栏可以直接执行 python 程序
  • 九宫格右键保存或者删除快速启动链接
  • 九宫格左键点击显示图形界面

为了方便使用,我们可以把这个软件打包成 exe 文件,或者重命名为 pyw 后缀,并创建快捷方式便于使用。

关键点一:

这个程序的核心思想就是再开一个进程来执行 py 文件,但是此时程序的路径为启动管理器的路径。所以说,如果你要打开的程序,比方说“PDF阅读器”,涉及到了文件路径,一定要使用绝对路径。如果使用了相对路径,必须在你的“PDF阅读器”源代码关于路径的地方加上下面这行代码。下面这行代码把当前路径更改为你的“PDF阅读器”所在目录。

代码语言:javascript
复制
os.chdir(os.path.dirname(os.path.realpath(__file__)))

关键点二:

我们使用 QProcess 来管理进程。首先创建一个 QProcess 对象,调用 startDetched 方法。startDetched 方法可以在主进程之外新开一个进程。也就是说,如果我们打开或者关闭 “PDF阅读器” ,并不影响启动管理器的运行。

代码语言:javascript
复制
from PyQt5.QtCore import QProcess
def open(self):
    fname = self.get_file()
    if fname:
        process = QProcess()
        process.startDetached('python', [fname])

关键点三:

重写 Button 按键类以支持右键菜单及一系列操作。

其中 parent 为按钮依附的主程序。

代码语言:javascript
复制
class MyButton(QPushButton):
    def __init__(self, parent=None):
        super(MyButton, self).__init__(parent)

重写以下功能:

  • 字体大小及样式
  • 支持右键菜单(添加、删除功能)
  • 重写左键点击事件

要保存的按钮信息包括:按钮名称(你设置的应用名称)、按钮对应地址、按钮状态(用于判断按钮有没有绑定地址,如果有的话,不支持修改覆盖名称操作)。

代码语言:javascript
复制
def initUi(self):
    # 右键菜单工具栏
    addAction = QAction('添加', self)
    addAction.triggered.connect(self.add)
    delAction = QAction('删除', self)
    delAction.triggered.connect(self.delete)
    self.addAction(addAction)
    self.addAction(delAction)
    self.clicked.connect(self.run)

关键点四:

与数据库交互,与上次 500 行代码实现 PDF 阅读器的思想基本相同,增加了上下文管理器,提高代码可读性。

数据库保存的信息,就是关键点三中提到的 button 的属性。

代码语言:javascript
复制
def save2db(start):
    with DBManger(starter) as conn:
        conn.execute("INSERT INTO starter Values (?,?,?)",
                (start.fname, start.name, start.state))
        conn.commit()

好了,关键点就这么多了,感兴趣的朋友可以在后台回复:2019412 来获取源代码,大家多多转发支持。

你有什么觉得不错的 Python 教程,可以在下面的小程序留言分享。独学而无友,则孤陋而寡闻。两个人分享经验,每个人都可以得到双倍的经验。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python高效编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 自带的方式
  • 批处理文件
  • 用 Python 实现启动工具箱
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档