実現したいこと
Tkinterの画面にて、所定に格納しているpptx(or pptm)ファイルをクリックと同時に開きたいです。
自分で調べたりcopilotに聞く内容をもとに以下のコードまではたどり着けましたが、どうしても以下のエラーメッセージとなり開けません。できればpptm、難しければpptxファイルの開き方をお教えください。
コードはダイアログとなってますが、できればダイレクトに開きたいです。
発生している問題・分からないこと
ファイルを開けませんでした。エラー[Errno 2] No such file or direcory:'test.pptx'
エラーメッセージ
error
1ファイルを開けませんでした。エラー[Errno 2] No such file or direcory:'test.pptx'
該当のソースコード
#pip install python-pptx#インストール済です import tkinter as tk from tkinter import filedialog, messagebox from pptx import Presentation def open_pptx(): # ファイル選択ダイアログを開く file_path = filedialog.askopenfilename( filetypes=[("PowerPoint Files", "*.pptx"), ("All Files", "*.*")] ) if file_path: try: # PowerPointファイルを開く presentation = Presentation(file_path) slide_count = len(presentation.slides) with open('test.pptx', 'r', encoding='utf-8') as file: content = file.read() print(content) # ここでファイルの内容を処理 except Exception as e: messagebox.showerror("エラー", f"ファイルを開けませんでした。\nエラー: {e}") # Tkinterウィンドウの作成 root = tk.Tk() root.title("PowerPointファイルを開く") # ボタンの作成 open_button = tk.Button(root, text="PowerPointを開く", command=open_pptx) open_button.pack(pady=20) # ウィンドウの表示 root.mainloop()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
copilitなどでコードを確認しました。
補足
特になし
> pptx(or pptm)ファイルをクリックと同時に開きたいです。
何がしたいのですか? 言いかえると、どういうことが起こることを期待していますか?
毎度ありがとうございます!いま実行後の画像を追加しましたが、このpowerpointのボタンをクリックすると、ローカルフォルダに保管しているpptxファイルを開くようにしたいです。
> pptxファイルを開くようにしたい
この「pptxファイルを開く」がどうなることを想定しているかです。
質問のコードの 「presentation = Presentation(file_path)」で指定したpptxファイルは開いているはずなのですが、たぶんそうとは認識されていませんよね?
失礼いたしました。上記を参考に途中を以下の通り組みなおしてみました。結果、エラーは出ないようになりましたが、実行中[*]となったままでpptxは開かれません。
def open_pptx():
# ファイル選択ダイアログを開く
file_path = filedialog.askopenfilename(
filetypes=[("PowerPoint Files", "*.pptx"), ("All Files", "*.*")]
)
if file_path:
# PowerPointファイルを開く
presentation = Presentation("C:\\###.pptx")
「pptxが開かれる」ということに関して、powerpointが起動してファイルが表示される、みたいなものを期待していたりしませんか?
Presentationはファイルの中身のテキストや画像を取得することは出来ますが、それをtkinterの画面に表示したいのであればそのコードは自分で書く必要がありますよ。
powerpointを開きたいのであればtkinterを利用するのではなく、subprocessで普通にpowerpointを起動するなどが必要かと思います
Eggpanさま、言語化してくださりありがとうございます。はい、まさしくそれを期待しておりました。
想定としては、tkinterの画面上にリンクをつけパワーポイントを直接開くようにしたかったのですがそれはできないということでしょうか。
Windows OS であれば os.startfile() を利用するとよいかと思います。
os.startfile(path[, operation][, arguments][, cwd][, show_cmd])
https://docs.python.org/3/library/os.html#os.startfile
> Start a file with its associated application.
melianさん、いつもありがとうございます。os.startfile()を試したところ問題が解決しました!
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
皆様もご回答いただきどうもありがとうございました。
> kashinomori さん
Copilot の提示したコードが PowerPoint ファイルを直接読み込む様なものになっていることを考慮すると、プロンプトが不適切であった可能性が高いと思われます。Copilot を利用していないので確かなことは判りませんが、例えば「ボタンをクリックすると PowerPoint を起動して指定のファイル(*.pptx)を読み込む様なコードを教えてください」と入力していれば os.startfile() を使用したコードが提示されたのではないかと思います。
> ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
自己回答&BAでよいかと思います。
ありがとうございます。takaY様からもご指摘と同様かと思いますが、「ボタンをクリックすると PowerPoint を起動して指定のファイル(*.pptx)を読み込む様なコードを教えてください」
この認識をしっかりもちたいと思います。ありがとうございました。
