I need to ask the user (me) to for a *new* folder, but all I can find is "askdirectory".
1) there does not seem to be a "create new folder" option
2) Providing it with an existing path with a suggested foldername just lets it default to the current folder (instead of the existing parent)
3) When providing a non-existing path clicking the OK button twice returns it anyway - without any signs of doing so. Not quite intuitive (and yes, I'm aware I can provide a "must exist" setting, but that would block /any/ attempt of creating a new folder).
I've been googeling for a solution but did not find much of anything, let alone a straight answer to this not really unique situation. Lots of clumsy "work-arounds" though :-(
tl;dr: How do I get tkinter to display a "new folder" dialog ?
On Tue, 5 May 2020 10:49:19 +0200, "R.Wieser" declaimed the following:
The short answer is that you probably have to subclass/extend the current dialog to add some button for "new directory" -- on clicking that button you present a dialog for a directory name (relative to current selected path), and use os.mkdir() to create the directory. Then refresh the dialog to add the new directory to its display...
I've only touched on tkinter some 20 years ago, and hated it -- trying to figure out what attributes were Python level vs stuff in the underlying TCL/TK library was painful.
--
Wulfraed Dennis Lee Bieber AF6VN
wlfraed@ix.netcom.com http://wlfraed.microdiversity.freeddns.org/
That ... was something I wanted to evade. Subclassing a tkinter GUI element is a whole new area for me, and I'm not even sure I want to go there (got enough other stuff to do).
I won't claim I hate it, but its currently a bit awkward to me too (it might still "grow" on me though). Starting with not even being able to put a dialog up (like the above one) without a "root" window being created too - which than has to be suppressed and ... Well, I'm sure that I will encounter some "interresting" effects because of that suppression later on.
But, if I want to have some GUI-based user interaction I don't think I've got much choice than to use tkinter.
pi@rpi3bplus-1:~$ sudo apt install python3-wxgtk4.0 wx3.0-doc Reading package lists... Done Building dependency tree Reading state information... Done python3-wxgtk4.0 is already the newest version (4.0.4+dfsg-2).
--
Wulfraed Dennis Lee Bieber AF6VN
wlfraed@ix.netcom.com http://wlfraed.microdiversity.freeddns.org/
On Tue, 05 May 2020 15:46:44 -0400, Dennis Lee Bieber declaimed the following:
ADDENDUM:
pi@rpi3bplus-1:~$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information.
'4.0.4'
'4.0.4 gtk3 (phoenix) wxWidgets 3.0.4'
... So appears to be there for recent Raspbian/Buster.
--
Wulfraed Dennis Lee Bieber AF6VN
wlfraed@ix.netcom.com http://wlfraed.microdiversity.freeddns.org/
On Tue, 05 May 2020 15:46:44 -0400, Dennis Lee Bieber declaimed the following:
SECOND ADDENDUM:
There are also binding for pyqt5 shown in the package list on Raspbian, but I have even less knowledge of the QT5 library (bad enough my wxPython books cover 2.x-3.x, I just ordered a book covering wxPython 4.x [Phoenix] as there are some significant changes
formatting link
--
Wulfraed Dennis Lee Bieber AF6VN
wlfraed@ix.netcom.com http://wlfraed.microdiversity.freeddns.org/
Thanks. Although I'm a bit of a sucker for whats installed by default, do you have any opinion about the easyness-of-use of WxWidgets (thats the name for them, isn't it?) compared to tkinter ?
Than again, I could not help myself to google for how to subclass tkinter elements. :-) Might be much easier than I thought. Will need to google some more.
(saw & read your other two post in this regard too)
On Wed, 6 May 2020 08:59:28 +0200, "R.Wieser" declaimed the following:
The book I'd ordered isn't as detailed as I'd like (it sure isn't an equivalent of the pre-Phoenix "wxPython In Action" book). It refers one to the on-line documentation for wxPython and basically just runs a sequence of examples from the equivalent of "Hello World", an image view, database viewer, ... FTP client.
However... Between the new book and
formatting link
I've hacked this somewhat wordy example... (no doubt everything could have been done directly in-line rather than the subclassed Panel and Frame -- but this the recommended style in the book). Watch out for line wrapping...
-=-=- import wx
class APanel(wx.Panel): def __init__(self, parent): super().__init__(parent) button = wx.Button(self, label="Select Directory") button.Bind(wx.EVT_BUTTON, self.on_button_press) self.directory = wx.TextCtrl(self, style=wx.TE_READONLY, size=(400, -1)) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(button, proportion=0, flag=wx.ALL | wx.CENTER, border=5) sizer.Add(self.directory, proportion=0, flag=wx.ALL | wx.CENTER, border=5) self.SetSizer(sizer) def on_button_press(self, event): with wx.DirDialog(None, message="Choose a Directory", defaultPath="", size=(400, 400), style=wx.DD_DEFAULT_STYLE, # | wx.DD_DIR_MUST_EXIST, ) as dialog: # OR the DD_DIR_MUST_EXIST if suppressing New Directory button if dialog.ShowModal() == wx.ID_OK: self.directory.SetValue(dialog.GetPath()) #else user CANCELLED, don't set directory
... which runs on my Win10, Debian Buster in Oracle VirtualBox, and on an R-Pi 3B. Looking at the command history on the R-Pi, I'd had to execute
sudo apt install python3-wxgtk4.0 wx3.0-doc
to install wxPython Phoenix for Python3.x (I've run similar on the Debian, and probably used pip3 on Win10.
On Linux, it seems to open in "/home" (and does not display a "create directory" button at that level -- but as soon as you've clicked on a directory (eg: "pi") the create directory button appears in the window.
I'll admit I'm getting a few warnings when run on the R-Pi, which did not appear in full Debian Buster.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.