推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

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

   2023-08-29 网络整理佚名1800
核心提示:来执行你的程序。程序的地址,最好使用绝对地址。实现启动工具箱实现一个启动工具箱。文件,但是此时程序的路径为启动管理器的路径。所以说,如果你要打开的程序,比方说“PDF阅读器”,涉及到了文件路径,一定要使用绝对路径。下面这行代码把当前路径更改为你的“PDF阅读器”所在目录。阅读器的思想基本相同,增加了上下文管理器,提高代码可读性。

到目前为止,高效编程已经介绍了很多图形界面软件,比如猜谜游戏、PDF阅读器、贪吃蛇游戏、天气查询软件、PDF阅读器等。为了方便别人,我们经常将图形界面打包成exe文件。 但如果我们只是为了自己方便使用的话,我们有必要把程序打包成几十甚至上百兆的exe文件吗? 不需要。 我们只需要能够快速启动图形界面即可。 下面我将介绍几种无需打开cmd窗口即可显示图形界面的方法。

独立的方式

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

在此插入图片描述

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

批处理文件

第二种方法与第一种类似。 它也是通过.exe执行pyw文件,只不过被替换为bat批处理文件。

我们新建一个txt文件,在里面输入这两行代码,然后保存为.bat文件。 start 后的第一个字符串表示 .exe 文件的位置,通常在您的安装目录下,与 .exe 在同一目录中。 第二个字符代表你的pyw程序的地址,最好使用绝对地址。

@echo off
start "D:\python372\pythonw.exe" "D:\\QQPCMgr\Desktop\Pytho高效编程\start.pyw" 

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

启动工具箱并执行

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

主要实现了以下功能:

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

要点一:

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

os.chdir(os.path.dirname(os.path.realpath(__file__)))

关键点二:

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

from PyQt5.QtCore import QProcess
def open(self):
 fname = self.get_file()
 if fname:
 process = QProcess()
 process.startDetached('python', [fname])

要点三:

重写按钮类,支持右键菜单等一系列操作。

其中就是按钮附带的主程序。

class MyButton(QPushButton):
 def __init__(self, parent=None):
 super(MyButton, self).__init__(parent)

重写以下函数:

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

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阅读器的思路基本相同,增加了上下文管理器以提高代码可读性。

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

def save2db(start):
 with DBManger(starter) as conn:
 conn.execute("INSERT INTO starter Values (?,?,?)",
 (start.fname, start.name, start.state))
 conn.commit()

好了,重点就这些了,感兴趣的朋友点击以下链接获取源码:

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON