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

如何通过Toplevel()在弹出窗口中打开PDF文件?

Tkinter PDF查看器弹出窗口无内容的问题修复

你的代码存在两个核心问题导致弹出窗口无法显示PDF内容:

  • 按钮的lambda: [viewpdf(), popup(file)]中,popup(file)会先于viewpdf()的文件选择逻辑执行,此时file还是初始空字符串;就算执行顺序正常,popup函数本身也没有加载PDF的逻辑。
  • 原popup函数只创建了空窗口,没有将PDF内容渲染到窗口中。

修复方案

  1. 改造popup函数,让它能接收文件名并在弹出窗口内加载PDF。
  2. 调整按钮的点击逻辑,确保popup能拿到正确的文件名,并且在文件选择完成后再调用。

修正后的完整代码

from tkinter import *
from tkinter import filedialog
from tkPDFViewer import tkPDFViewer as pdf
import os 

# 创建主窗口
root = Tk() 
root.geometry("1000x700+200+100")
root.title("PDF Viewer")
root.configure(bg="light blue")  

# 查看框架
view_frame=Frame(root, bg="light blue", bd=5, width=400)
view_frame.pack(side=LEFT)  

# 生成弹出窗口查看PDF
def popup(filename):  
    win=Toplevel(root)  
    win.geometry("800x600")  # 调整窗口大小适配PDF显示
    win.title(os.path.basename(filename))  # 只显示文件名更美观
    
    # 在弹出窗口中加载PDF
    pdf_viewer = pdf.ShowPdf()
    pdf_viewer.img_object_li.clear()
    pdf_widget = pdf_viewer.pdf_view(win, pdf_location=open(filename,"rb"), height=550, width=780)
    pdf_widget.pack(pady=10)

v2 = None 
# 搜索文件并处理
def viewpdf():
    global v2
    filename = filedialog.askopenfilename(
        initialdir=os.getcwd(),
        title="Select PDF File",
        filetype=(('PDF File', '.pdf'), ('PDF File', '.PDF'))
    )

    if filename:
        # 销毁主窗口旧的PDF视图
        if v2:
            v2.destroy()
        # 更新主窗口的PDF视图
        v1 = pdf.ShowPdf()
        v1.img_object_li.clear()
        v2 = v1.pdf_view(view_frame, pdf_location=open(filename,"rb"), height=50, width=80)
        v2.pack(pady=(0,0))
        
        # 调用弹出窗口显示PDF
        popup(filename)

# 设置按钮,直接绑定viewpdf函数即可
view_button = Button(view_frame, text='SEARCH FOR FILES', command=viewpdf, width=50, bd=5)
view_button.pack()  

root.mainloop()

关键改动说明

  • 弹出窗口加载PDF:在popup函数中新增PDF加载逻辑,使用弹出窗口win作为父容器,创建PDF查看组件并显示。
  • 调整执行顺序:把popup的调用放到viewpdf函数内部,确保只有用户选择有效文件后才弹出窗口,且传入最新文件名。
  • 优化文件类型过滤:移除不必要的.txt文件类型,只保留PDF格式,避免选择错误文件。
  • 窗口大小调整:增大弹出窗口尺寸,让PDF内容正常显示。
  • 文件打开方式:将open(filename,"r")改为open(filename,"rb"),PDF是二进制文件,用只读二进制模式打开更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:36