python / cpython

The Python programming language
https://www.python.org
Other
63.48k stars 30.4k forks source link

tkinter.filedialog.askdirectory() hangs if the directory name has right trailing blanks #126839

Open Madpentiste opened 5 hours ago

Madpentiste commented 5 hours ago

Bug report

Bug description:

# Add a code block here, if required

from tkinter import filedialog as FD
from tkinter import *

Racine = Tk()
Racine.withdraw() 
chosen_dir = FD.askdirectory(parent=Racine)
print("Chosen directory :", chosen_dir)
Racine.destroy()

# more python here, using the variable chosen_dir

Giving names to directories with right trailing blanks sometime happens. OS like Linux keep them as they are, untrimmed. Directories with such names cannot be chosen with a python program using tkinter.filedialog.askdirectory()because the python program hangs with the filedialog window open; only the Cancel button or the close-window's widget will close it, with a wrong value for chosen_rep.

The most simple workaround is to remove right-trailing blanks from directory names before starting the python program involving a tkinter.filedialog.askdirectory() function call; this is a tedious task since these blanks are difficult to spot. In my case, it took me time to figure out why my program would work fine most of the times (directories with no blank at the end of their names), but would hang in some cases ; I finally found out that the trailing blanks in the directory name were the issue.

CPython versions tested on:

3.10

Operating systems tested on:

Linux

serhiy-storchaka commented 3 hours ago

What is the Tk version?

I tested on Linux (Tk 8.6.12). Pressing button OK does not work first time, but pressing it again closes the dialog Window and returns the path with trimmed spaces. The same behavior is in pure Tcl/Tk.

puts "([tk_chooseDirectory -parent .])"

So this is not Python issue.