• Pyqt5 获取命令行参数sys.argv


    大家有没有注意到,很多软件都能接收第三方应用触发命令行参数,根据参数打开想要的效果。

    在windows任务管理器调取命令行列,我们同样能看到进程中有好多是带有参数的。

    现在,我们用Pyqt5 (Py3.3)实现这样的效果

    一. 先说说sys.argv

    官方介绍

    sys.argv

    The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string.

    To loop over the standard input, or the list of files given on the command line, see the fileinput module.

    「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。

    这个变量其实是一个List列表,argv[0] 一般是被调用的脚本文件名或全路径,和操作系统有关,argv[1]和以后就是传入的数据了。参数从1开始

    一般参数由空格分隔。

    二. 实现Pyqt5 获取sys.argv 命令行参数

    # -*- coding: utf-8 -*-
    # 直接运行, 提示请在命令行中运行, 运行参数, -install   -open=C:documentapple.mp3    -color=red|green|yellow
    from PyQt5 import QtCore, QtGui, QtWidgets
    import sys, os
    import subprocess
    
    
    class class_cmds(QtWidgets.QWidget):
        Cargv = QtCore.pyqtSignal(list)  # 定义一个带list参数的signal
    
        def __init__(self, ):
            super(class_cmds, self).__init__()
            # 直接运行exe
            if sys.argv.__len__() == 1:
                self.dobexec()
                sys.exit()
    
            self.resize(100, 100)
            self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)  # 去掉windowHint
            self.setWindowIcon(QtGui.QIcon('favicon.ico'))
            self.Cargv.connect(self.dialogg)  # 触发信号后连接到一个槽dialogg
    
            is_show_btn = ''
            for arg in sys.argv:
                if arg == '-install':
                    is_show_btn = '安装软件!'
                color = arg.split('-color=')  # 设置背景颜色
                if color.__len__() >= 2:
                    try:
                        '''
                        palette1 = QtGui.QPalette(self)
                        palette1.setColor(QtGui.QPalette.Background, QtGui.QColor(192, 253, 123))  # 设置背景颜色
                        self.setPalette(palette1)
                        '''
                        self.setStyleSheet('background-color:'+color[1])
                    except:
                        pass
                copen = arg.split('-open=')  # 打开一个文件
                if copen.__len__() >= 2:
                    try:
                        # subprocess.Popen(copen[1])  # 非阻塞, 可打开exe,但对于.mp3、xls、txt、pdf 无效
                        os.system(str(copen[1]))
                        pass
                    except:
                        pass
            if is_show_btn:
                self.verticalLayout = QtWidgets.QVBoxLayout()
                self.pushButton = QtWidgets.QPushButton(is_show_btn)
                self.verticalLayout.addWidget(self.pushButton)
                self.setLayout(self.verticalLayout)
                self.pushButton.clicked.connect(self.ok)
    
        def keyPressEvent(self, event):
            if event.key() == QtCore.Qt.Key_Escape:
                self.close()
    
        def ok(self):
            self.Cargv.emit(sys.argv)  # 发射一个信号
    
        def dialogg(self, list):
            QtWidgets.QMessageBox.about(self, '安装提示!', '可实行逻辑安装!' + list[0])
    
        # 直接运行
        def dobexec(self):
            QtWidgets.QMessageBox.information(None, "运行提示!",
                                              "<p>请在命令行中运行!运行参数包括:</p>"
                                              "<p><b>-install:</b>开始安装软件</p>"
                                              "<p><b>-open=path:</b>打开一个path的文件,如:-open=C:\document\apple.mp3</p>"
                                              "<p><b>-color:</b>color 显示exe背景颜色, 其中color=( red|green|yellow )</p>")
    
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        myclass = class_cmds()
        myclass.show()
        sys.exit(app.exec_())

    程序说明

    直接运行我们让程序弹出一个MessageBox,提示在命令行中运行的命令参数

    参数包括三个(-install      -open         -color)

    -install 显示一个btn,表示可以触发btn下的逻辑,比如下载、安装等

    -open  打开路径下的应用

    -color  让程序显示自定义背景

    当在命令行中带参数运行时就能看到每个参数对应的逻辑。

    打包程序

    PyInstaller: 3.0.dev6

    if __name__ == '__main__':
        from PyInstaller import __main__
        params = ['-F', '-w', '--icon=favicon.ico', 'cmds.py']
        __main__.run(params)

    三. 运行效果

    直接双击exe运行

    在命令行中不带参数运行

    命令行带-install 参数

    点击btn

    命令行带 -install 、 -color 参数

    命令行带 -open 、 -color 参数

  • 相关阅读:
    洛谷P2192HXY玩卡片
    洛谷P1876开灯
    洛谷 P2515 [HAOI2010]软件安装(缩点+树形dp)
    洛谷 P2059 [JLOI2013]卡牌游戏(概率dp)
    洛谷 P3380 【模板】二逼平衡树(树套树)
    洛谷 P3157 [CQOI2011]动态逆序对(树套树)
    CF914E Palindromes in a Tree(点分治)
    洛谷 P2542 [AHOI2005]航线规划(Link-cut-tree)
    洛谷 P2495 [SDOI2011]消耗战(虚树,dp)
    洛谷 P4036 [JSOI2008]火星人(splay+字符串hash)
  • 原文地址:https://www.cnblogs.com/dcb3688/p/4607963.html
Copyright © 2020-2023  润新知