PPYGUI - parent window and closing it

View: New views
5 Messages — Rating Filter:   Alert me  

PPYGUI - parent window and closing it

by Adam Walley :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello, Alexandre.

I have begun testing some ideas using the PPYGUI and find it very easy to work with. However, I would like to ask if there is a way to know when the user has pressed the 'X' button in the top right of the window to close the app? The reason I ask, is that when I run some ppygui code a blank Python window opens, then the ppygui app window opens on top of it. When I close the app using the top right 'X' I am returned to the blank Python window. This is very similar to the situation on the desktop version of Python, where a terminal window opens unless your Python file is run with the .pyw extension.

I can implement a 'close' button that executes the sys.exit() command, and this successfully closes the app and the blank Python terminal window together. Nevertheless that top right 'X' is still there, and I would prefer the users of my app to have something consistent and which behaves as expected (i.e when you press 'X' the app exits or at least is hidden fully).

How do it detect this 'close' event for the main app?

Adam

_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce

Re: PPYGUI - parent window and closing it

by Alexandre Delattre :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> Hello, Alexandre.

> I have begun testing some ideas using the PPYGUI and find it very easy to
> work with. However, I would like to ask if there is a way to know when the
> user has pressed the 'X' button in the top right of the window to close the
> app? The reason I ask, is that when I run some ppygui code a blank Python
> window opens, then the ppygui app window opens on top of it. When I close
> the app using the top right 'X' I am returned to the blank Python window.
> This is very similar to the situation on the desktop version of Python,
> where a terminal window opens unless your Python file is run with the .pyw
> extension.

> I can implement a 'close' button that executes the sys.exit() command, and
> this successfully closes the app and the blank Python terminal window
> together. Nevertheless that top right 'X' is still there, and I would prefer
> the users of my app to have something consistent and which behaves as
> expected (i.e when you press 'X' the app exits or at least is hidden fully).

> How do it detect this 'close' event for the main app?

> Adam

Currently the best option is to install the tMan task manager <http://pda.jasnapaka.com/tman/> or others,
which allow to close program when clicking 'X' instead of the default minimize behaviour which is problematic
with PythonCE (other PythonCE gui toolkits have the same problem regarding this).

PPygui has already some inner logic, which makes the 'app.run()'
line returns when the main frame is closed (with tMan), so it'll work well with it.

Unfortunately the .pyw extension is buggy on PythonCE due to a mis-written registry key,
You can fix it with a registry editor of your choice, by setting the key:
HKEY_CLASSES_ROOT/Python.File.NoShell/Shell/Open/Command/Default =
 "\Program Files\Python25\python.exe" /nopcceshell "%1"


You can also intercept the 'close' event at application level (but still need tMan to work)

import ppygui as gui
class MainFrame(gui.CeFrame):
  def __init__(self):
    gui.CeFrame.__init__(self, title='Hello')
    self.bind(close=self.on_close)

  def on_close(self, ev):
    if gui.Message.yesno('Confirmation',
                         'Do you want to quit',
                         'question', self) == 'yes':
      ev.skip() # If user say yes, let the close event be further processed by the default implementation which will close the window for good


Hope this helps,
Alexandre

_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce

Re: PPYGUI - parent window and closing it

by Adam Walley :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

That's perfect! Thanks for your suggestions. I have adjusted the registry to allow for .pyw files without the shell (CeRegEditor did the job). Now when I run my code and press the 'X' in the top right corner, the whole thing exits smoothly and fully - Great!

I didn't want to use tMan because that would mean that my users would need to use/install it too. Binding the close signal to the app works very nicely with the emulator without tMan, but not on my WM5 device (as you had explained).

Thanks again for the assistance.

Adam.

2008/7/10 Alexandre Delattre <alexandre.delattre@...>:
Hello, Alexandre.

I have begun testing some ideas using the PPYGUI and find it very easy to
work with. However, I would like to ask if there is a way to know when the
user has pressed the 'X' button in the top right of the window to close the
app? The reason I ask, is that when I run some ppygui code a blank Python
window opens, then the ppygui app window opens on top of it. When I close
the app using the top right 'X' I am returned to the blank Python window.
This is very similar to the situation on the desktop version of Python,
where a terminal window opens unless your Python file is run with the .pyw
extension.

I can implement a 'close' button that executes the sys.exit() command, and
this successfully closes the app and the blank Python terminal window
together. Nevertheless that top right 'X' is still there, and I would prefer
the users of my app to have something consistent and which behaves as
expected (i.e when you press 'X' the app exits or at least is hidden fully).

How do it detect this 'close' event for the main app?

Adam

Currently the best option is to install the tMan task manager <http://pda.jasnapaka.com/tman/> or others,
which allow to close program when clicking 'X' instead of the default minimize behaviour which is problematic
with PythonCE (other PythonCE gui toolkits have the same problem regarding this).

PPygui has already some inner logic, which makes the 'app.run()'
line returns when the main frame is closed (with tMan), so it'll work well with it.

Unfortunately the .pyw extension is buggy on PythonCE due to a mis-written registry key,
You can fix it with a registry editor of your choice, by setting the key:
HKEY_CLASSES_ROOT/Python.File.NoShell/Shell/Open/Command/Default = "\Program Files\Python25\python.exe" /nopcceshell "%1"


You can also intercept the 'close' event at application level (but still need tMan to work)

import ppygui as gui
class MainFrame(gui.CeFrame):
 def __init__(self):
  gui.CeFrame.__init__(self, title='Hello')
  self.bind(close=self.on_close)

 def on_close(self, ev):
  if gui.Message.yesno('Confirmation',                        'Do you want to quit',                        'question', self) == 'yes':
    ev.skip() # If user say yes, let the close event be further processed by the default implementation which will close the window for good


Hope this helps,
Alexandre



_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce

Parent Message unknown Re: PPYGUI - parent window and closing it

by Alexandre Delattre :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Adam, there's one downside to not use tMan: even if the window disappear it is still running background and the only way to really close it is in the Memory app of the control panel.

But rejoice, following this discussion I've been able to modify ppygui so that windows are really closed even without tMan :)

Now, even a .py file will see it's terminal closed when the gui main frame is closed, without using tMan.

Expect to see the code in svn in a few hours.

Alexandre

_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce

Re: PPYGUI - parent window and closing it

by Adam Walley :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Some parts of this message have been removed. Learn more about Nabble's security policy.
Alexandre,
 
Thank you for this news. I will update things tomorrow and see if it works. Just to be clear, when I originally tested my app, the Python shell launches and the ppygui app opens on top of it. I was able to go into settings/system/memory and close the Python shell without affecting the normal operation of the ppygui. Also, when I exited my ppygui app using my sys.exit() button everything closes correctly and is no longer resident - I checked this in settings/system/memory. When I used the 'X' then both the shell and the app would remain resident until I terminated them manually. This also prevented me from running another app until I had done this.
 
Using the registry tweak, the Python shell is not visible and it does not even appear in the list under settings/system/memory; only my app's name appears. When I exit, everything is closed normally whether I use my own sys.exit() button or the 'X' in the corner, and nothing remains in memory (unless it somehow stays there without appearing in the system's list).
 
These are my experiences specific to my iPAQ1950 running WM5 and PythonCE 2.5, so other systems may not behave exactly this way (though PythonCE does seem to be quite consistent).
 
Anyhow, I think this problem has been resolved, so thanks again.
 
Adam
 
On 10/07/2008, Alexandre Delattre <alexandre.delattre@...> wrote:
Adam, there's one downside to not use tMan: even if the window disappear it is still running background and the only way to really close it is in the Memory app of the control panel.

But rejoice, following this discussion I've been able to modify ppygui so that windows are really closed even without tMan :)

Now, even a .py file will see it's terminal closed when the gui main frame is closed, without using tMan.

Expect to see the code in svn in a few hours.

Alexandre

_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce



_______________________________________________
PythonCE mailing list
PythonCE@...
http://mail.python.org/mailman/listinfo/pythonce