I'M try to make a program that works with drag file into gui and create a hash code for it. But if path of file has space in it, then it goes error. How can i fix this
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\c9947515\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "C:\Users\c9947515\Desktop\Phyton\pythonProject1\dosya hash.py", line 19, in on_drop
with open(file_path, "rb") as file:
^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: '{C:/Users/c9947515/Desktop/Wire Text.txt}'
import tkinterdnd2 as tk
import tkinter as tk2
import hashlib
root = tk.Tk()
root.title("File Hash Calculator")
root.geometry("400x150")
root.drop_target_register(tk.DND_FILES)
def on_drop(event):
file_path = event.data
# Dosya yolunu oku ve dosya içeriğini oku
with open(file_path, "rb") as file:
data = file.read()
# Dosya içeriğine göre SHA1 değerini hesapla
sha1_hash = hashlib.sha1(data).hexdigest()
# SHA1 değerini inputbox'a yazdır
input_box.insert(0, sha1_hash)
# Dosya sürükleyip bırakıldığında tetiklenecek fonksiyonu ata
root.dnd_bind("<<Drop>>", on_drop)
# Açıklama yazısı oluştur
label = tk2.Label(root, text="Drag and drop a file to calculate its SHA1 hash:")
label.pack()
# Giriş alanı oluştur
input_box = tk2.Entry(root)
input_box.pack()
# Pencerenin çalışmasını sağla
root.mainloop()
CodePudding user response:
It is added by the underlying TCL interpreter when there are spaces in the string. You can remove them using .strip("{}")
:
file_path = event.data.strip("{}")
CodePudding user response:
{
and }
are being added to your paths
if you use file_path = file_path.replace("{", "").replace("}", "")
then it will not handle files with {
or }
in the filename
import tkinterdnd2 as tk
import tkinter as tk2
import hashlib
root = tk.Tk()
root.title("File Hash Calculator")
root.geometry("400x150")
root.drop_target_register(tk.DND_FILES)
def on_drop(event):
if event.data.startswith('{') and event.data.endswith('}'):
file_path = event.data.removesuffix('}').removeprefix('{')
else:
file_path = event.data
# Dosya yolunu oku ve dosya içeriğini oku
with open(file_path, "rb") as file:
data = file.read()
# Dosya içeriğine göre SHA1 değerini hesapla
sha1_hash = hashlib.sha1(data).hexdigest()
# SHA1 değerini inputbox'a yazdır
input_box.insert(0, sha1_hash)
# Dosya sürükleyip bırakıldığında tetiklenecek fonksiyonu ata
root.dnd_bind("<<Drop>>", on_drop)
# Açıklama yazısı oluştur
label = tk2.Label(root, text="Drag and drop a file to calculate its SHA1 hash:")
label.pack()
# Giriş alanı oluştur
input_box = tk2.Entry(root)
input_box.pack()
# Pencerenin çalışmasını sağla
root.mainloop()