Keks
@Keks

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonで拡張子の変更を行うGUIアプリでのエラー

解決したいこと

pythonでフォルダ内のファイルの拡張子を変更するGUIアプリを作っているが変更する機能をつけようとしていたらエラーが発生したためそれの解決方法を教えて頂きたい。

発生している問題・エラー

Traceback (most recent call last):
  File "c:\proglam\Python\work\FileExtChenger\main_var2 copy.py", line 60, in <module>
    f.rename(apps+f.stem+after)
  File "C:\Users\keks\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 1382, in rename
    self._accessor.rename(self, target)
PermissionError: [WinError 32] プロセスはファイルにアクセスできません。別のプロセスが使用中です。: '.' -> '.!combobox2'

該当するソースコード

import tkinter 
import tkinter.ttk as ttk
from tkinter import filedialog
from tkinter import *
from msilib.schema import Directory
from pathlib import Path
from setuptools import Command


apps=''
before=''
after=''


def directory_select():
  file_path=tkinter.filedialog.askdirectory()
  apps=file_path
  input_box.insert(tkinter.END, file_path)

  
#ウインドウの作成
root = tkinter.Tk()
root.title("Python GUI")
root.geometry("360x240")

#ラベルの作成
input_label = tkinter.Label(text="変更するフォルダorファイル")
input_label.place(x=10, y=20)

#入力欄の作成
input_box = tkinter.Entry(width=40)
input_box.place(x=10, y=40)

#ボタンの作成
button = tkinter.Button(text="参照",command=directory_select)
button.place(x=260, y=36)


#ラベルの作成
input_label2 = tkinter.Label(text="変更するファイル拡張子")
input_label2.place(x=10, y=60)

module=('.txt','.png','.JPEG',"*")
combobox = ttk.Combobox(root, height=4,width=15,values=module)
before=combobox
combobox.place(x=10,y=80)

#ラベルの作成
input_label3 = tkinter.Label(text="変更後のファイル拡張子")
input_label3.place(x=150, y=60)

module=('.txt','.png','.JPEG')
combobox2 = ttk.Combobox(root, height=3,width=15,values=module)
after=str(combobox2)
combobox2.place(x=150,y=80)


# 拡張子の変更
for f in Path(apps).rglob(before.get()):
    f.rename(apps+f.stem+after)

#ウインドウの描画
root.mainloop()

自分で試したこと

いろいろいじくってたらさっぱりになってしまいました;;
途中の段階ではこのような感じで作っていました。
スクリーンショット (25).png

0

1Answer

rglobが受け取るのは文字列ですが、comboboxオブジェクトを渡しているためだと思います。

調べてみましたが、before.get()で値を取得できませんか?

0Like

Comments

  1. @Keks

    Questioner

    返信ありがとうございます。

    変更後このようなエラーになりました。

    f.rename(apps+f.stem+after)
    TypeError: can only concatenate str (not "Combobox") to str
  2. afterも同じcomboboxオブジェクトなんじゃないでしょうか?str型のみ連結できます、というエラーなので、全てがstr型か確認してください。
  3. @Keks

    Questioner

    指摘ありがとうございます。
    確認し、変更しました。

    その後

    PermissionError: [WinError 32] プロセスはファイルにアクセスできま せん。別のプロセスが使用中です。: '.' -> '.!combobox2'

    このようなエラーになりました;;
    何度も申し訳ありません。
  4. うーん、ごめんなさい良く分からないです。読んでそのまま拡張子を書き換えようとしてるファイルかフォルダだかを、他のプロセスが使用中のようですが。
  5. @Keks

    Questioner

    ありがとうございます。
    自分でゆっくり考えてみます。
  6. これはまた別の問題なので、この質問は閉じて新しい質問を作ることをお勧めします。

Your answer might help someone💌