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

如何在Tkinter中通过点击按钮打开打印菜单?

Tkinter实现点击按钮唤起打印菜单的方法

Tkinter标准库本身没有封装通用的跨平台打印对话框组件,不用硬着头皮自己写菜单逻辑,直接调用系统原生打印接口是性价比最高的方案,以下是可直接复用的实现代码:

  • Windows平台适配(覆盖绝大多数桌面端Tkinter应用场景)
    借助pywin32库调用系统原生打印接口,调起的菜单和系统右键打印的体验完全一致,没有自定义组件的割裂感。
    先安装依赖:
    pip install pywin32
    完整可运行示例:

    import tkinter as tk
    from tkinter import filedialog
    import win32api
    import win32print
    
    def trigger_print():
        # 不需要选文件的话可以把下面三行删掉,直接传固定的待打印文件路径
        target_file = filedialog.askopenfilename(title="选择待打印文件")
        if not target_file:
            return
        # 唤起系统打印菜单
        win32api.ShellExecute(
            0,
            "print",
            target_file,
            f'/d:"{win32print.GetDefaultPrinter()}"',
            ".",
            0
        )
    
    root = tk.Tk()
    root.geometry("300x150")
    # 绑定按钮点击事件
    print_btn = tk.Button(root, text="唤起打印菜单", command=trigger_print, padx=10, pady=5)
    print_btn.pack(pady=50)
    root.mainloop()
    

    如果需要打印当前Tkinter窗口的画布内容,直接调用Canvas组件的postscript()方法导出为.ps格式临时文件,把临时文件路径传给打印接口即可,不用额外做截图转码。

  • 跨平台兼容方案
    如果需要适配macOS、Linux系统,可以根据运行平台调用对应系统的打印命令,不需要额外引入重型GUI库:

    import sys
    import os
    # 上面的导入项和trigger_print函数里的选文件逻辑保留
    def trigger_print():
        target_file = filedialog.askopenfilename(title="选择待打印文件")
        if not target_file:
            return
        if sys.platform == "win32":
            import win32api
            import win32print
            win32api.ShellExecute(0, "print", target_file, f'/d:"{win32print.GetDefaultPrinter()}"', ".", 0)
        elif sys.platform == "darwin":
            # macOS调用系统原生lp命令唤起打印选项
            os.system(f"lp {target_file}")
        else:
            # Linux调用CUPS打印服务
            os.system(f"lpr {target_file}")
    # 窗口和按钮创建逻辑和Windows版本完全一致
    

避坑提醒:不要尝试用Tkinter组件从头搭建打印配置菜单,系统原生打印菜单包含打印机选择、页码范围、份数、双面打印、色彩调整等几十项配置,自行实现的开发和适配成本极高,还容易出现不同打印机型号兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:36:32