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

如何在Tkinter窗口中嵌入外部应用 解决现有代码运行报错问题

问题原因&解决方案

报错根因

  • 你对app_1变量调用了open()方法,得到的是文件IO对象,而os.system()要求传入的是字符串类型的文件路径,所以触发类型错误。
  • 你对图片也调用了open()方法,原生Tkinter不支持直接读取文件对象加载PNG图片,后续也会触发图片加载错误。
  • 你当前的逻辑只是尝试打开外部程序,完全没有实现「嵌入外部应用窗口到Tkinter中」的逻辑,需要调用Windows平台API实现该需求。

前置依赖安装

执行以下命令安装需要的第三方库:

pip install pillow pywin32

完整修改代码

from tkinter import *
import os
import time
import win32gui
import win32con
from PIL import Image, ImageTk

# 初始化主窗口
window = Tk()
window.geometry('1000x700')
window.title("内嵌应用演示")

# 加载应用图标
app_icon_path = './Images/App_Icons/App_1.png'
icon = Image.open(app_icon_path)
app_1_icon = ImageTk.PhotoImage(icon.resize((40,40))) # 可根据需求调整图标大小

# 存放嵌入应用的容器frame
app_frame = Frame(window, width=900, height=600, bg="gray")
app_frame.pack(pady=20)

# 启动目标应用(快捷方式用os.startfile打开更稳妥)
app_path = './Applications/App_1.lnk'
os.startfile(app_path)
time.sleep(2) # 等待应用窗口完全启动,可根据实际启动速度调整时长

# 获取应用窗口句柄,替换下面的窗口标题为你实际启动的App_1的窗口标题
app_hwnd = win32gui.FindWindow(None, "你的App_1窗口标题")
if app_hwnd:
    # 设置应用窗口的父容器为我们创建的frame
    win32gui.SetParent(app_hwnd, app_frame.winfo_id())
    # 移除窗口的标题栏、边框等多余样式
    style = win32gui.GetWindowLong(app_hwnd, win32con.GWL_STYLE)
    style = style & ~(win32con.WS_CAPTION | win32con.WS_THICKFRAME | win32con.WS_MINIMIZEBOX | win32con.WS_MAXIMIZEBOX | win32con.WS_SYSMENU)
    win32gui.SetWindowLong(app_hwnd, win32con.GWL_STYLE, style)
    # 调整应用窗口大小适配容器
    win32gui.SetWindowPos(app_hwnd, win32con.HWND_TOP, 0, 0, 900, 600, win32con.SWP_SHOWWINDOW)

# 显示应用图标和名称(可根据你的需求调整布局)
icon_label = Label(window, image=app_1_icon)
icon_label.pack(side=LEFT, padx=20)
app_name_label = Label(window, text="App_1", font=("微软雅黑",14))
app_name_label.pack(side=LEFT)

window.mainloop()

注意事项

  • 代码中win32gui.FindWindow的第二个参数需要替换为你启动的App_1实际的窗口标题,你可以打开App_1后手动查看窗口顶部的标题文字填写。
  • 如果应用启动速度较慢,可以适当调大time.sleep的等待时长。
  • 该方案仅适用于Windows平台,依赖Win32 API实现窗口嵌入。

内容的提问来源于stack exchange,提问作者AsmitTheCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:36:05