如何在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:测试并做成桌面快捷方式
- 运行脚本测试:
python3 script_launcher.py,看看控件是否正常,点击按钮能否正确调用你的脚本。 - 如果没问题,创建一个桌面启动器:
- 在
~/.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
相关产品推荐
相关产品推荐

