I’m trying to run this code but I keep getting an error related to tkinterdnd2
python is installed in the 64-bit version along with all the libraries.
import os
import time
import datetime
from pathlib import Path
from tkinter import Tk, Label, Entry, Button, StringVar, OptionMenu, filedialog
from tkinterdnd2 import TkinterDnD, DND_FILES
# Ustawienie zmiennych środowiskowych dla Tcl i Tk
os.environ['TCL_LIBRARY'] = r'C:UsersprivaAppDataLocalProgramsPythonPython312tcltcl8.6'
os.environ['TK_LIBRARY'] = r'C:UsersprivaAppDataLocalProgramsPythonPython312tcltk8.6'
def get_latest_file(folder):
path = Path(folder)
files = list(path.glob('*'))
if not files:
return None
latest_file = max(files, key=os.path.getctime)
return latest_file.name
def update_fields(*args):
for widget in specific_fields:
widget.grid_remove()
if job_type_var.get() == 'Content Digital':
maszyna_label.grid(row=3, column=0, padx=10, pady=5)
maszyna_menu.grid(row=3, column=1, padx=10, pady=5)
wykonczenie_label.grid(row=4, column=0, padx=10, pady=5)
wykonczenie_menu.grid(row=4, column=1, padx=10, pady=5)
elif job_type_var.get() == 'Content Inkjet':
tytul_label.grid(row=3, column=0, padx=10, pady=5)
tytul_entry.grid(row=3, column=1, padx=10, pady=5)
rozmiar_label.grid(row=4, column=0, padx=10, pady=5)
rozmiar_entry.grid(row=4, column=1, padx=10, pady=5)
data_label.grid(row=5, column=0, padx=10, pady=5)
data_entry.grid(row=5, column=1, padx=10, pady=5)
elif job_type_var.get() == 'Cover':
okladka_label.grid(row=3, column=0, padx=10, pady=5)
okladka_menu.grid(row=3, column=1, padx=10, pady=5)
laminat_label.grid(row=4, column=0, padx=10, pady=5)
laminat_menu.grid(row=4, column=1, padx=10, pady=5)
data_label.grid(row=5, column=0, padx=10, pady=5)
data_entry.grid(row=5, column=1, padx=10, pady=5)
def on_drop(event):
file_path = event.data
latest_file = os.path.basename(file_path)
try:
if job_type_var.get() == 'Content Digital':
numer = numer_entry.get()
express = express_var.get()
express = '' if express == 'Nie' else 'EXPRESS'
maszyna = maszyna_var.get()
maszyna = 'CONTENT' if maszyna == 'HP' else 'KM-1-CONTENT' if maszyna == 'KM' else 'IX3200-CONTENT'
wykonczenie = wykonczenie_var.get()
wykonczenie = 'SWB' if wykonczenie == 'Szycie' else 'PB' if wykonczenie == 'Klejenie' else 'WIO'
papier = papier_entry.get().upper()
kolor = kolor_var.get()
ilosc = ilosc_entry.get()
new_filename = f"{numer}_{express}_{maszyna}_{wykonczenie}_{papier}_{kolor}_{ilosc}.pdf"
elif job_type_var.get() == 'Content Inkjet':
numer = numer_entry.get()
express = express_var.get()
express = '' if express == 'Nie' else 'EXPRESS '
tytul = tytul_entry.get()
ilosc = ilosc_entry.get()
papier = papier_entry.get().upper()
kolor = kolor_var.get()
rozmiar = rozmiar_entry.get()
data = data_entry.get()
new_filename = f"{express}{numer}_{tytul}_{ilosc}qty_{papier}_{kolor}_{rozmiar}mm_{data}.pdf"
elif job_type_var.get() == 'Cover':
numer = numer_entry.get()
express = express_var.get()
express = '' if express == 'Nie' else 'EXPRESS '
okladka = okladka_var.get()
ilosc = ilosc_entry.get()
papier = papier_entry.get().upper()
kolor = kolor_var.get()
laminat = laminat_var.get()
data = data_entry.get()
new_filename = f"{express}{numer} {okladka} {ilosc}qty {papier} {kolor} {laminat} {data}.pdf"
czas = datetime.datetime.now().strftime("%Y.%m.%d %H:%M")
with open('Wszystkie zlecenia.txt', 'a') as myFile:
print(f"{new_filename} {czas}", file=myFile)
os.rename(file_path, f"{output_folder}/{new_filename}")
print('n')
except Exception as e:
print(f"An error occurred: {e}")
# Inicjalizacja głównego okna
root = TkinterDnD.Tk()
root.title('Zmiana Nazwy Plików')
root.geometry('250x300')
root.minsize(250, 300)
# Foldery
input_folder = 'input'
output_folder = 'output'
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# Interfejs użytkownika
job_type_var = StringVar()
job_type_var.trace('w', update_fields)
numer_label = Label(root, text="Numer zlecenia")
numer_entry = Entry(root)
express_label = Label(root, text="Express")
express_var = StringVar()
express_menu = OptionMenu(root, express_var, "Tak", "Nie")
job_type_label = Label(root, text="Typ zlecenia")
job_type_menu = OptionMenu(root, job_type_var, "Content Digital", "Content Inkjet", "Cover")
maszyna_label = Label(root, text="Maszyna")
maszyna_var = StringVar()
maszyna_menu = OptionMenu(root, maszyna_var, "HP", "KM", "CANNON")
wykonczenie_label = Label(root, text="Wykończenie")
wykonczenie_var = StringVar()
wykonczenie_menu = OptionMenu(root, wykonczenie_var, "Szycie", "Klejenie", "WIO")
tytul_label = Label(root, text="Tytuł")
tytul_entry = Entry(root)
rozmiar_label = Label(root, text="Rozmiar")
rozmiar_entry = Entry(root)
data_label = Label(root, text="Data")
data_entry = Entry(root)
okladka_label = Label(root, text="Okładka")
okladka_var = StringVar()
okladka_menu = OptionMenu(root, okladka_var, "SOFTCOVER", "SOFTCOVERWF", "HARDCOVER", "HARDCOVERS", "COVERWIO", "DUSTCOVER")
laminat_label = Label(root, text="Laminat")
laminat_var = StringVar()
laminat_menu = OptionMenu(root, laminat_var, "MATT", "GLOSS", "SOFT-TOUCH", "NON-SCRATCH", "NONE")
papier_label = Label(root, text="Papier")
papier_entry = Entry(root)
kolor_label = Label(root, text="Kolor")
kolor_var = StringVar()
kolor_menu = OptionMenu(root, kolor_var, "4+4", "4+0", "1+1", "1+0")
ilosc_label = Label(root, text="Ilość")
ilosc_entry = Entry(root)
# Layout
job_type_label.grid(row=0, column=0, padx=10, pady=5)
job_type_menu.grid(row=0, column=1, padx=10, pady=5)
numer_label.grid(row=1, column=0, padx=10, pady=5)
numer_entry.grid(row=1, column=1, padx=10, pady=5)
express_label.grid(row=2, column=0, padx=10, pady=5)
express_menu.grid(row=2, column=1, padx=10, pady=5)
papier_label.grid(row=6, column=0, padx=10, pady=5)
papier_entry.grid(row=6, column=1, padx=10, pady=5)
kolor_label.grid(row=7, column=0, padx=10, pady=5)
kolor_menu.grid(row=7, column=1, padx=10, pady=5)
ilosc_label.grid(row=8, column=0, padx=10, pady=5)
ilosc_entry.grid(row=8, column=1, padx=10, pady=5)
specific_fields = [
maszyna_label, maszyna_menu, wykonczenie_label, wykonczenie_menu,
tytul_label, tytul_entry, rozmiar_label, rozmiar_entry,
data_label, data_entry, okladka_label, okladka_menu,
laminat_label, laminat_menu, papier_label, papier_entry,
kolor_label, kolor_menu, ilosc_label, ilosc_entry
]
update_fields()
# Obsługa przeciągania plików
root.drop_target_register(DND_FILES)
root.dnd_bind('<<Drop>>', on_drop)
root.mainloop()
im trying reinstalling all library with python. installing 32bit version, and nothing work. I tried also ask chatgpt to help me but its still AI. I hope this code is correct for me.
New contributor
s0qll is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.