You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu上创建带参数选择功能的Python Script调用桌面小部件

如何在Ubuntu上创建带参数选择功能的Python Script调用桌面小部件

当然可以实现!在Ubuntu上做一个带参数选择的桌面小部件来调用你的Python脚本其实挺简单的,我给你推荐两种常用的方法,都是用Python就能搞定的,不用折腾复杂的工具:

方法一:用GTK3(Ubuntu原生支持,推荐)

GTK是Ubuntu桌面环境的原生工具库,兼容性最好,不用额外装太多依赖。

步骤1:安装必要依赖

打开终端,先装需要的包:

sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

步骤2:编写小部件脚本

创建一个名为script_launcher.py的文件,把下面的代码复制进去,然后根据你的实际参数需求修改控件和脚本路径:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import subprocess
import os

# 替换成你自己的Python脚本绝对路径
YOUR_SCRIPT_PATH = "/home/your_username/your_script.py"

class ScriptLauncher(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="脚本启动器")
        self.set_border_width(10)
        self.set_default_size(300, 200)

        # 布局容器
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # 第一个参数:单选按钮组(示例:选择模式)
        self.mode_group = Gtk.RadioButton.new_with_label_from_widget(None, "模式A")
        vbox.pack_start(self.mode_group, True, True, 0)
        mode_b = Gtk.RadioButton.new_with_label_from_widget(self.mode_group, "模式B")
        vbox.pack_start(mode_b, True, True, 0)

        # 第二个参数:复选框(示例:启用功能X)
        self.feature_x = Gtk.CheckButton(label="启用功能X")
        vbox.pack_start(self.feature_x, True, True, 0)

        # 第三个参数:复选框(示例:启用日志)
        self.enable_log = Gtk.CheckButton(label="启用日志输出")
        vbox.pack_start(self.enable_log, True, True, 0)

        # 提交按钮
        submit_btn = Gtk.Button(label="运行脚本")
        submit_btn.connect("clicked", self.on_submit_clicked)
        vbox.pack_start(submit_btn, True, True, 0)

    def on_submit_clicked(self, widget):
        # 获取选中的参数
        param1 = "mode_a" if self.mode_group.get_active() else "mode_b"
        param2 = "enable_x" if self.feature_x.get_active() else "disable_x"
        param3 = "log_on" if self.enable_log.get_active() else "log_off"

        # 构造命令,调用你的脚本
        command = ["python3", YOUR_SCRIPT_PATH, param1, param2, param3]
        try:
            # 运行脚本,这里可以根据需求调整是否显示终端输出
            subprocess.run(command, check=True)
            # 弹出提示框告知成功
            dialog = Gtk.MessageDialog(
                transient_for=self,
                flags=0,
                message_type=Gtk.MessageType.INFO,
                buttons=Gtk.ButtonsType.OK,
                text="脚本运行成功!",
            )
            dialog.run()
            dialog.destroy()
        except subprocess.CalledProcessError as e:
            # 出错时提示
            dialog = Gtk.MessageDialog(
                transient_for=self,
                flags=0,
                message_type=Gtk.MessageType.ERROR,
                buttons=Gtk.ButtonsType.OK,
                text="脚本运行失败!",
                secondary_text=f"错误信息:{str(e)}",
            )
            dialog.run()
            dialog.destroy()

if __name__ == "__main__":
    win = ScriptLauncher()
    win.connect("destroy", Gtk.main_quit)
    win.show_all()
    Gtk.main()

步骤3:测试并做成桌面快捷方式

  1. 运行脚本测试:python3 script_launcher.py,看看控件是否正常,点击按钮能否正确调用你的脚本。
  2. 如果没问题,创建一个桌面启动器:
    • 在~/.local/share/applications/目录下创建script-launcher.desktop文件,内容如下:
      [Desktop Entry]
      Name=脚本启动器
      Comment=带参数选择的脚本调用小部件
      Exec=python3 /home/your_username/script_launcher.py
      Icon=utilities-terminal
      Terminal=false
      Type=Application
      Categories=Utility;
      
    • 保存后,你就可以在应用程序菜单里找到“脚本启动器”,或者直接拖到桌面/侧边栏当小部件用了。

方法二:用PyQt5(更灵活的UI设计)

如果你更喜欢Qt的UI风格,也可以用PyQt5来做:

步骤1:安装依赖

sudo apt install python3-pyqt5

步骤2:编写小部件脚本

创建qt_launcher.py,代码示例如下:

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, 
                             QRadioButton, QCheckBox, QPushButton, QMessageBox)
import subprocess

# 替换成你的脚本绝对路径
YOUR_SCRIPT_PATH = "/home/your_username/your_script.py"

class ScriptLauncher(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('脚本启动器')
        self.resize(300, 200)
        layout = QVBoxLayout()

        # 第一个参数:单选按钮
        self.radio_a = QRadioButton('模式A')
        self.radio_a.setChecked(True)
        layout.addWidget(self.radio_a)
        self.radio_b = QRadioButton('模式B')
        layout.addWidget(self.radio_b)

        # 第二个参数:复选框
        self.check_x = QCheckBox('启用功能X')
        layout.addWidget(self.check_x)

        # 第三个参数:复选框
        self.check_log = QCheckBox('启用日志输出')
        layout.addWidget(self.check_log)

        # 提交按钮
        btn = QPushButton('运行脚本')
        btn.clicked.connect(self.onSubmit)
        layout.addWidget(btn)

        self.setLayout(layout)

    def onSubmit(self):
        # 获取参数
        param1 = 'mode_a' if self.radio_a.isChecked() else 'mode_b'
        param2 = 'enable_x' if self.check_x.isChecked() else 'disable_x'
        param3 = 'log_on' if self.check_log.isChecked() else 'log_off'

        # 调用脚本
        command = ['python3', YOUR_SCRIPT_PATH, param1, param2, param3]
        try:
            subprocess.run(command, check=True)
            QMessageBox.information(self, '成功', '脚本运行完成!')
        except subprocess.CalledProcessError as e:
            QMessageBox.critical(self, '失败', f'脚本运行出错:{str(e)}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ScriptLauncher()
    ex.show()
    sys.exit(app.exec_())

步骤3:同样可以创建.desktop快捷方式,和GTK方法一样,把Exec路径改成你的qt_launcher.py即可。

一些小提示

  • 一定要用脚本的绝对路径,避免因为工作目录不同导致找不到脚本的问题。
  • 如果你的脚本需要终端输出,可以把subprocess的调用改成带终端的,比如用["gnome-terminal", "--", "python3", YOUR_SCRIPT_PATH, ...],这样会弹出终端显示输出。
  • 控件类型可以随便换:如果你的参数是多选一就用单选按钮,是开关就用复选框,甚至可以加下拉框(QComboBox/GTK.ComboBox),完全根据你的参数需求调整。

备注:内容来源于stack exchange,提问作者R M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:43:01