云计算百科
云计算领域专业知识百科平台

python程序:设置程序启动按钮,点击按钮启动电脑上某个程序?

指令:

使用 python 的 Tkinter库可以实现一个按钮点击后执行电脑上某个磁盘下面的某个程序

实现思路:

在 Python 中可以通过 Tkinter(注意库名是 tkinter,非 tinner)创建按钮,并实现点击后运行电脑上的 EXE 程序。核心思路是通过 Tkinter 的按钮组件绑定事件,在事件触发时调用系统命令执行 EXE 文件。
以下是具体实现方法:
实现步骤:
导入必要库:使用 tkinter 创建 GUI 界面,使用 os.system 或 subprocess.run 执行外部程序。
创建窗口和按钮:通过 Tkinter 构建基础界面,添加按钮组件。
绑定按钮事件:定义一个函数,在函数中通过系统命令运行目标 EXE,然后将函数绑定到按钮的点击事件。

实现方法:

1、新建一个txt文档,重命名为:ChengXuQiDong.pyw(如果提示如下,点击是)
在这里插入图片描述

2、复制如下代码到文件里,然后保存一下:

import tkinter as tk
from tkinter import scrolledtext, ttk
import subprocess
import datetime
import os

# 确保日志目录存在
LOG_DIR = "logs"
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)

# 日志文件路径
LOG_FILE = os.path.join(LOG_DIR, f"exe_runner_log_{datetime.datetime.now().strftime('%Y%m%d')}.txt")

def write_log(message, is_error=False):
"""写入日志到文件并更新界面显示"""
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] {'[ERROR]' if is_error else '[INFO]'} {message}\\n"

# 写入日志文件
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(log_entry)

# 更新界面日志显示
log_text.config(state=tk.NORMAL)
log_text.insert(tk.END, log_entry)
# 自动滚动到底部
log_text.see(tk.END)
log_text.config(state=tk.DISABLED)

def show_custom_message(title, message, color_text=None):
"""
显示自定义消息框
color_text: 元组,(要标红的文本, 颜色)
"""
# 创建顶层窗口作为对话框
dialog = tk.Toplevel(root)
dialog.title(title)
dialog.geometry("400×200")
dialog.resizable(False, False)

# 使对话框成为模态窗口(阻塞其他窗口操作)
dialog.grab_set()

# 居中显示
dialog.update_idletasks()
width = dialog.winfo_width()
height = dialog.winfo_height()
x = (root.winfo_width() // 2) – (width // 2) + root.winfo_x()
y = (root.winfo_height() // 2) – (height // 2) + root.winfo_y()
dialog.geometry(f"+{x}+{y}")

# 创建消息框架
frame = ttk.Frame(dialog, padding=20)
frame.pack(fill=tk.BOTH, expand=True)

# 显示消息
if color_text:
# 分割文本并设置颜色
text_widget = tk.Text(frame, wrap=tk.WORD, height=6, width=40, borderwidth=0)
text_widget.pack(fill=tk.BOTH, expand=True)

# 插入普通文本
text_widget.insert(tk.END, message)

# 标记需要变色的文本
text_widget.tag_configure("colored", foreground=color_text[1])
start_pos = "1.0"
while True:
start_pos = text_widget.search(color_text[0], start_pos, stopindex=tk.END)
if not start_pos:
break
end_pos = f"{start_pos}+{len(color_text[0])}c"
text_widget.tag_add("colored", start_pos, end_pos)
start_pos = end_pos

text_widget.config(state=tk.DISABLED)
else:
# 普通文本
label = ttk.Label(frame, text=message, wraplength=350)
label.pack(fill=tk.BOTH, expand=True)

# 确定按钮
btn_frame = ttk.Frame(dialog, padding=10)
btn_frame.pack(fill=tk.X)

ok_btn = ttk.Button(btn_frame, text="确定", command=dialog.destroy)
ok_btn.pack(pady=5)

# 等待对话框关闭
root.wait_window(dialog)

def run_exe():
# 目标 EXE 文件的完整路径(替换为你的 EXE 路径)
exe_path = r"E:\\python_ing\\Flask1\\flask-task-manager-with-delete-category—3\\dist\\app.exe" # 示例路径,需修改

write_log(f"尝试启动程序: {exe_path}")

try:
# 启动子进程,不等待其完成
global process
process = subprocess.Popen(
exe_path,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding="utf-8",
errors="replace" # 处理可能的编码问题
)

write_log(f"程序已启动:{exe_path}")
# 显示自定义消息框,将"程序已启动"设为红色
show_custom_message("成功", f"程序已启动:\\n{exe_path}", ("程序已启动", "red"))

# 启动一个定时器,定期检查子进程状态
check_process()

except FileNotFoundError:
error_msg = f"未找到文件:{exe_path}"
write_log(error_msg, is_error=True)
show_custom_message("错误", error_msg, ("未找到文件", "red"))
except Exception as e:
error_msg = f"启动失败:{str(e)}"
write_log(error_msg, is_error=True)
show_custom_message("错误", error_msg, ("启动失败", "red"))

def check_process():
"""检查子进程状态并获取输出"""
if 'process' in globals() and process.poll() is None:
# 子进程仍在运行,继续检查
root.after(1000, check_process) # 1秒后再次检查
elif 'process' in globals():
# 子进程已完成,获取输出
stdout, stderr = process.communicate()

if stdout:
write_log(f"程序输出:\\n{stdout}")
if stderr:
write_log(f"程序错误输出:\\n{stderr}", is_error=True)

write_log(f"程序已退出,返回代码: {process.returncode}")

# 创建主窗口
root = tk.Tk()
root.title("运行 EXE 程序 – 带日志记录")
root.geometry("600×500") # 窗口大小

# 创建按钮,点击时调用 run_exe 函数
btn_frame = ttk.Frame(root)
btn_frame.pack(pady=10)

btn = ttk.Button(
btn_frame,
text="点击启动程序",
command=run_exe,
width=20
)
btn.pack()

# 创建按钮,点击时调用 run_exe 函数
btn_frame = ttk.Frame(root)
btn_frame.pack(pady=10)

btn = ttk.Button(
btn_frame,
text="点击启动程序",
command=run_exe,
width=20
)
btn.pack()

# 日志显示区域
log_label = ttk.Label(root, text="运行日志:", font=("Arial", 10, "bold"))
log_label.pack(anchor="w", padx=10)

log_text = scrolledtext.ScrolledText(
root,
wrap=tk.WORD,
width=70,
height=20,
state=tk.DISABLED,
font=("Consolas", 9)
)
log_text.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)

# 底部信息
footer = ttk.Label(
root,
text=f"日志文件保存至: {LOG_FILE}",
font=("Arial", 8),
foreground="gray"
)
footer.pack(side=tk.BOTTOM, pady=5)

# 启动时写入日志
write_log("程序启动,等待用户操作…")

# 启动主循环
root.mainloop()

实现效果:

双击启动:ChengXuQiDong.pyw后,如下:
在这里插入图片描述
点击点击启动程序启动程序后,如下:
出现启动程序成功的日志 和 弹框提醒运行成功的程序的位置
在这里插入图片描述
如下是更改程序路径的位置:
在这里插入图片描述

新增功能1:新增一个按钮,并且实现点击后启动程序2

实现方法:

1、找到如下代码块复制一份,粘贴到下方
然后把复制后的代码中:
上方的btn改为:btn2
点击启动程序改为:点击启动程序2
run_exe改为:run_exe2
下方的btn改为:btn2
padx的值改为:25
在这里插入图片描述

然后复制出来一份如下代码到下方
在这里插入图片描述
下方的代码修改点如下,修改后保存再双击运行程序即可
在这里插入图片描述
运行后效果:
在这里插入图片描述

PS:

如果想竖向显示按钮,则:
把btn里面的这些都去掉即可
在这里插入图片描述
运行后效果:
在这里插入图片描述

赞(0)
未经允许不得转载:网硕互联帮助中心 » python程序:设置程序启动按钮,点击按钮启动电脑上某个程序?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!