This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: tkinter.filedialog.askopenfilename XT dialog on Windows 7
Type: behavior Stage: resolved
Components: Tkinter Versions: Python 3.2
process
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: brian.curtin, digiproc, hfischer, loewis, ned.deily, terry.reedy
Priority: normal Keywords:

Created on 2011-05-30 20:54 by hfischer, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
python31-correct-filedialog.png hfischer, 2011-05-30 20:54 Python 3.1 correct Windows askopenfilename dialog
python32-wrong-filedialog.png hfischer, 2011-05-30 20:55 Python 3.2 wrong style and not resizable Windows askopenfilename dialog
Messages (8)
msg137325 - (view) Author: Herm Fischer (hfischer) Date: 2011-05-30 20:54
tkinter.filedialog.askopenfilename works fine on the Windows builds of Python 3.1.

However on Python 3.2 (Windows builds via Active State), this dialog comes up with the old Windows XT style on Windows 7 (missing navigation pane) and the dialog is not resizable (it was resizable in Python 3.1).

Application users are inconvenienced, trouble opening long file names.

Is there a work-around in Python 3.2?
msg137342 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2011-05-30 23:24
If the problem is with an ActiveState distribution of Python 3.2, you should probably be asking this on the ActiveState forums.
msg137345 - (view) Author: Herm Fischer (hfischer) Date: 2011-05-31 05:20
Now also posted to http://bugs.activestate.com/show_bug.cgi?id=90234
msg137381 - (view) Author: Herm Fischer (hfischer) Date: 2011-05-31 18:37
I've now tried this issue on python.org's own 3.2 and 3.2.1rc1 (64 bit) builds, and they also do have the same problem.
msg137604 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2011-06-03 22:33
I have no idea what 'XT' in the title means.

The only possible relevant change I *know* of is that 3.2 on Windows comes with a later version tk/tcl 8.5 than 3.1. If you find the exact version numbers, you could query/report on the tk/tcl forums, also at ActiveState.

You could also diff the 3.1 and 3.2 versions of the relevant tkinter files, (particularly filedialog, commondialog, dialog) working back from tkinter.filedialog.askopenfilename, and see if there were any possibly relevant changes on our side.
msg140180 - (view) Author: digi proc (digiproc) Date: 2011-07-12 13:17
Almost certainly a tkinter bug.

A work around is below. First build a DLL from the following C++ source (and add a similar function for the 'save' dlg rather than the 'open' dlg):

#include "windows.h"
#include "Commdlg.h"
#include "tchar.h"

extern "C"{

 __declspec(dllexport)  wchar_t * _cdecl GetOpenFileNamePlus(HWND Parent,LPCWSTR InitDir,LPCWSTR FilenameIn,LPCWSTR Filter,LPCWSTR DefExt,LPCWSTR Title)
{
	OPENFILENAME OpenFile;

//	MessageBox(NULL,Title,L"",MB_OK);

	memset (&OpenFile, 0, sizeof(OPENFILENAME));

    static wchar_t Filename[MAX_PATH*2];

    _tcscpy(Filename,FilenameIn);

    OpenFile.lpstrInitialDir=InitDir;
	OpenFile.lStructSize = sizeof(OPENFILENAME);
	OpenFile.hwndOwner = Parent;
	OpenFile.lpstrFile = Filename;
	OpenFile.nMaxFile = MAX_PATH*2+10;
	OpenFile.lpstrFilter = Filter;
	OpenFile.nFilterIndex = 0;
	OpenFile.lpstrDefExt=DefExt;
	OpenFile.lpstrTitle = Title;

	OpenFile.Flags=OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR;

	long Stat=GetOpenFileName(&OpenFile);

	if(Stat)
	    return Filename;
	else
	    return NULL;
}


}

Then in python call it like this, for example:

import ctypes

commdlg=ctypes.windll.commdlg_plus
commdlg.GetOpenFileNamePlus.argtypes= [ctypes.c_void_p, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_wchar_p]
commdlg.GetOpenFileNamePlus.restype= ctypes.c_wchar_p
s=commdlg.GetOpenFileNamePlus(0, "StartDir", "DefFilename", "Text files\0*.txt\0Image files\0*.jpg;*.gif\0\0","txt", "Select a file")
msg140181 - (view) Author: digi proc (digiproc) Date: 2011-07-12 13:20
By the way, that above C++ function is not re-entrant! I was lazy and just made a static return buffer. To make it re-entrant, you'd need to figure out how to allocate enough space in the DefFile string so the C function could write the selected filename to that buffer instead of making its own.
msg251629 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-09-26 02:49
I am closing this because for 3.4.3 and 3.5.0 on Win 7, both of which use tk 8.6.x, the file open dialog works as in the 'correct' png, with a navigation pane.
History
Date User Action Args
2022-04-11 14:57:18adminsetgithub: 56428
2015-09-26 02:49:46terry.reedysetstatus: open -> closed
resolution: out of date
messages: + msg251629

stage: resolved
2011-07-12 13:20:46digiprocsetmessages: + msg140181
2011-07-12 13:17:24digiprocsetnosy: + digiproc
messages: + msg140180
2011-06-03 22:33:57terry.reedysetnosy: + terry.reedy
messages: + msg137604
2011-05-31 18:37:59hfischersetmessages: + msg137381
2011-05-31 05:20:24hfischersetmessages: + msg137345
2011-05-30 23:24:56ned.deilysetnosy: + loewis, brian.curtin, ned.deily
messages: + msg137342
2011-05-30 20:55:55hfischersetfiles: + python32-wrong-filedialog.png
2011-05-30 20:54:40hfischercreate