tkFileDialog closes main application
mdmdmd
mt_nich at yahoo.com
Thu Dec 21 20:53:22 EST 2006
Thanks for the reply.
I used your modified code to test. I ran the code on Windows Python 2.4
tcl/tk 8.4. When I opened the ui I:
1) click browse button
2) file dialog opens and I double click the file. When I do this, the
selected file path is entered in Entry field. I don't need to close
dialog, it closes automatically.
3) click browse button again
4) double click file
5) repeat
sometimes it only takes one time to kill root, sometimes a few more.
After I killed root with the double clicks I then tried with a click
browse - select file - click open button very slowly making sure I
didn't double click and the same thing happened - root was destroyed.
BTW, with your modified code, the "Closed by the WM" was not displayed
to console.
Hmmm? I think this must just be peculiar to Windows. Can any other
windows users test to see if they can reproduce?
thanks again for your response.
Eric Brunel wrote:
> On Wed, 20 Dec 2006 18:37:10 +0100, mdmdmd <mt_nich at yahoo.com> wrote:
>
>> Hello,
>>
>> I wish to collect 4 files from a user. So I have decided to use
>> tkFileDialog askopenfilename. My problem is that after a few file
>> selections the root window is destroyed (the whole program just
>> dissappears)
>
>
> I tested the code below on Linux with Python 2.1 and tcl/tk 8.3.4 and
> it works perfectly.
>
>> I have created a simple example and was able to reproduce the same
>> thing with this. I've just started using tkinter so I have no idea
>> what I may be doing wrong. If anyone has any ideas please let me know.
>>
>> If you run the following code, just click the Browse button, and
>> select a file. Do this repeatedly and for me after the sixth or
>> seventh time the window shuts down.
>
>
> Is there any error when this happens? Have you tried running your
> script from a DOS command window?
>
>> BTW, I'm using python 2.4 on Windows XP. Thank you for any help.
>
>
> How do you select your files? I occasionally see problems on Windows
> when a window is closed via a double-click: the last 'button release'
> event for the double-click is not consumed by the dialog, but sent to
> the window behind it. Could it be what happens? If you select your
> files with a double-click and if the mouse cursor just happens to be on
> the close button for your main window behind it, you may involuntarily
> close the main window when selecting the file. Please try to select the
> files and then press the 'Open' button to see if the problem still
> happens.
>
> Here is a tiny modification to your code to print a message when the
> window is closed via its close button:
>
>> ################################################################################
>>
>>
>> from Tkinter import *
>> import Pmw
>> import tkFileDialog
>> import os.path
>>
>> filepath = 'C:\\Documents and Settings\\admin\\Desktop\\'
>>
>> class App(Frame):
>> def __init__(self,master):
>> Frame.__init__(self, master, bg='gray')
>> self.enttxt = StringVar()
>>
>> lbl = Label(self,text='File 1:')
>> lbl.grid(row = 0,column = 0,sticky = W,padx = 5,pady = 5)
>>
>> self.e1 = Entry(self,textvariable = self.enttxt,width = 50)
>> self.e1.grid(row = 0,column = 1,columnspan = 3,sticky =
>> W,padx = 5,pady = 5)
>>
>> btn = Button(self,text='Browse ...',width = 12,
>> command = self.browse)
>> btn.grid(row = 0,column = 4,sticky=W,padx=5,pady=5)
>
>
> master.protocol('WM_DELETE_WINDOW', self.doQuit)
>
> def doQuit(self):
> print 'Closed by the WM!'
> self.quit()
>
>>
>> def browse(self):
>> fileformats = [('Text File ','*.csv'),
>> ('All Files ','*.*')]
>>
>> retval = tkFileDialog.askopenfilename(title='Choose File',
>> initialdir=filepath,
>> filetypes=fileformats,
>> parent = self)
>> if retval:
>> self.enttxt.set(os.path.abspath(retval))
>>
>> def main():
>> root = Tk()
>> root.withdraw()
>> root.title('test')
>> root.configure(bg='gray')
>> app = App(root)
>> app.pack()
>> root.update()
>> root.deiconify()
>>
>> root.mainloop()
>>
>>
>> if __name__ == '__main__':
>> main()
>
>
> BTW, why do you create a sub-class of Frame for your application? Why
> not create a sub-class of Tk instead?
>
> HTH
More information about the Python-list
mailing list