前提
Pythonにて、フォルダを指定した後、複数画像(.jpg)を、pdfに変換するアプリを作成しています。
出力したpdfのファイル名をうまく設定できず、エラーが発生してしまいます。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
・「参照」ボタンにて取得したフォルダ内の画像を、まとめてpdfにする
・出力するファイル名を、「フォルダ名.pdf」のように名前を変更したい。
発生している問題・エラーメッセージ
エラーメッセージ PS C:\Users\sawad> & C:/Users/sawad/AppData/Local/Programs/Python/Python310/python.exe c:/Users/sawad/AppData/Local/Programs/Python/python_lesson/jikkou1.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\sawad\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__ return self.func(*args) File "c:\Users\sawad\AppData\Local\Programs\Python\python_lesson\jikkou1.py", line 18, in pdfchange pdfFileName = print(os.path.basename(iDirPath1) + ".pdf" ) UnboundLocalError: local variable 'iDirPath1' referenced before assignment
該当のソースコード
Python
import os import tkinter as tk from tkinter import *from tkinter import ttk from tkinter import filedialog import img2pdf # フォルダ指定の関数def dirdialog_clicked(): iDir1 = os.path.abspath(os.path.dirname(__file__)) iDirPath1 = filedialog.askdirectory(initialdir = iDir1) entry1.set(iDirPath1) #変換ボタン押下時の実行関数def pdfchange(): #出力するpdfのファイル名 pdfFileName = print(os.path.basename(iDirPath1) + ".pdf" ) #pdfにしたい画像のあるフォルダを指定する iDirPath1 = entry1.get() #変換したい画像の拡張子 ext = ".jpg" #「path」のある(カレント)フォルダを指定する os.chdir(iDirPath1) file_list = [i for i in os.listdir(iDirPath1) if i.endswith(ext)] with open(pdfFileName, "wb") as f: f.write(img2pdf.convert(sorted(file_list), title='Test PDF', viewer_page_layout=img2pdf.parse_layout('single'))) if __name__ == "__main__": # rootの作成 root = Tk() root.title("PDF変換ツール") # Frame1の作成 frame1 = ttk.Frame(root, padding=10) frame1.grid(row=0, column=1, sticky=E) # 「フォルダ参照」ラベルの作成 IDirLabel = ttk.Label(frame1, text="フォルダ参照>>", padding=(5, 2)) IDirLabel.pack(side=LEFT) # 「フォルダ参照」エントリーの作成 entry1 = StringVar() IDirEntry = ttk.Entry(frame1, textvariable=entry1, width=30) IDirEntry.pack(side=LEFT) # 「フォルダ参照1」ボタンの作成 IDirButton = ttk.Button(frame1, text="参照", command=dirdialog_clicked) IDirButton.pack(side=LEFT) # Frame2の作成 frame2 = ttk.Frame(root, padding=10) frame2.grid(row=2, column=1, sticky=E) # Frame3の作成 frame3 = ttk.Frame(root, padding=10) frame3.grid(row=5,column=1,sticky=W) # キャンセルボタンの設置 button2 = ttk.Button(frame3, text=("閉じる"), command=quit) button2.pack(fill = "x", padx=30, side = "left") # 実行ボタンの設置 button3 = ttk.Button(frame3, text="変換", command=pdfchange) button3.pack(fill = "x", padx=30, side = "left") root.mainloop()
試したこと
ここに問題に対して試したことを記載してください。
17行目の下記の部分を
pdfFileName = print(os.path.basename(iDirPath1) + ".pdf" )
から、
pdfFileName = "output.pdf"
のような直接ファイル名を指定すると、「output.pdf」として出力は成功するのですが、、
ファイル名をどうにかフォルダ名にして出力したいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント