how to provide input to a shellcript through the gui

Hello everyone! :slight_smile:

So, I’m working on Linux Ubuntu 12.04 and trying to make a GUI which -

  • asks the user to select the desired file using FileDialog

  • then the user clicks on a button which runs a shellscript on the terminal which determines the type of file and what kind of compression would be best for it and then compresses it.

So, I have my shellscript ready and it works perfectly. The trouble is with the GUI ofcourse!

Here’s what I’ve done till now -

import wx

import wx.lib.sized_controls as sc

import sys, subprocess, xdg, os

class abc(sc.SizedFrame):

def __init__(self, parent, id):

        super(abc, self).__init__(parent, id, 'Frame aka window')

        cpane = self.GetContentsPane()

 

       

         fileselect

= wx.FileDialog(self, message=‘Choose file to open’, defaultDir=wx.GetHomeDir(), defaultFile=‘evaluation.doc’, style=wx.FD_OPEN)

        if fileselect.ShowModal() == wx.ID_OK:

                fileName = fileselect.GetPath()

        fileselect.Destroy()

 

    button = wx.Button(cpane, label="script")

        self.Bind(wx.EVT_BUTTON, self.button1, button)

        self.Bind(wx.EVT_CLOSE, self.closewindow)

           

def button1(self,event):

    print os.system('inputscript')

 



def closewindow(self, event):

        self.Destroy()

if name == ‘main’:

import wx.lib.mixins.inspection as wit



app = wit.InspectableApp()

frame = abc(parent=None, id=-1)

frame.Show()



app.MainLoop()

Right now, what I do in my script is I ask the user to enter the file path, then change directory and then
enter the file name. However, I would like this part to be done by the GUI. So, is there a way that the fileName retrieved by the GUI using FileDialog can be passed as an input to the script?

I’ve attached my script alongwith, incase you would like to see it.

P.S. - new to wxpython. So please reply in detail!

Thanks! :slight_smile:

script.txt (2.15 KB)

change:
fileName = fileselect.GetPath()

to

self.fileName = fileselect.GetPath()

then in the button event handler change:

os.system(‘inputscript’)

to:

proc = subprocess.Popen([‘inputscript’, self.fileName])

out, err = proc.communicate()

Basically you are passing self.fileName as an argument to the ‘inputscript’. You will need to handle args in your shell script:

···

On Tuesday, July 1, 2014 1:46:21 PM UTC-7, Ankita Juneja wrote:

Hello everyone! :slight_smile:

So, I’m working on Linux Ubuntu 12.04 and trying to make a GUI which -

  • asks the user to select the desired file using FileDialog

  • then the user clicks on a button which runs a shellscript on the terminal which determines the type of file and what kind of compression would be best for it and then compresses it.

So, I have my shellscript ready and it works perfectly. The trouble is with the GUI ofcourse!

Here’s what I’ve done till now -

import wx

import wx.lib.sized_controls as sc

import sys, subprocess, xdg, os

class abc(sc.SizedFrame):

def __init__(self, parent, id):


        super(abc, self).__init__(parent, id, 'Frame aka window')


        cpane = self.GetContentsPane()



 

       

         fileselect

= wx.FileDialog(self, message=‘Choose file to open’, defaultDir=wx.GetHomeDir(), defaultFile=‘evaluation.doc’, style=wx.FD_OPEN)

        if fileselect.ShowModal() == wx.ID_OK:


                fileName = fileselect.GetPath()

        fileselect.Destroy()



 

    button = wx.Button(cpane, label="script")


        self.Bind(wx.EVT_BUTTON, self.button1, button)


        self.Bind(wx.EVT_CLOSE, self.closewindow)


           

def button1(self,event):

    print os.system('inputscript')


 



def closewindow(self, event):


        self.Destroy()

if name == ‘main’:

import wx.lib.mixins.inspection as wit




app = wit.InspectableApp()


frame = abc(parent=None, id=-1)


frame.Show()




app.MainLoop()

Right now, what I do in my script is I ask the user to enter the file path, then change directory and then
enter the file name. However, I would like this part to be done by the GUI. So, is there a way that the fileName retrieved by the GUI using FileDialog can be passed as an input to the script?

I’ve attached my script alongwith, incase you would like to see it.

P.S. - new to wxpython. So please reply in detail!

Thanks! :slight_smile:

Hey Nathan!
Thanks for the reply. I read that link you sent me, made the required changes and it worked! :slight_smile:
However now when I select a file, **fileName **returns this “/home/ankita/evaluation.doc”, i.e, the file path along with the file name. What am I supposed to do if I would like to retrieve only the file name?

Hi Ankita,

See this for os.path.split()

https://docs.python.org/2/library/os.path.html

HTH

MarkL

···

On 2 July 2014 17:11, Ankita Juneja ankitaj.pec@gmail.com wrote:

Hey Nathan!
Thanks for the reply. I read that link you sent me, made the required changes and it worked! :slight_smile:
However now when I select a file, **fileName **returns this “/home/ankita/evaluation.doc”, i.e, the file path along with the file name. What am I supposed to do if I would like to retrieve only the file name?

You received this message because you are subscribed to the Google Groups “wxPython-users” group.

To unsubscribe from this group and stop receiving emails from it, send an email to wxpython-users+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Have a look at Python’s os.path:
Werner

···

Hi Ankita,

  On 7/2/2014 9:11, Ankita Juneja wrote:
    Hey Nathan!

    Thanks for the reply. I read that link you sent me, made the

required changes and it worked! :slight_smile:
However now when I select a file, **fileName ** returns this
“/home/ankita/evaluation.doc”, i.e, the file path along with the
file name. What am I supposed to do if I would like to retrieve
only the file name?

https://docs.python.org/2/library/os.path.html

Or use a different method/property on the FileDialog:
wxpython.org/Phoenix/docs/html/FileDialog.html
Werner

···

Again hi,

  On 7/2/2014 9:11, Ankita Juneja wrote:
    Hey Nathan!

    Thanks for the reply. I read that link you sent me, made the

required changes and it worked! :slight_smile:
However now when I select a file, **fileName ** returns this
“/home/ankita/evaluation.doc”, i.e, the file path along with the
file name. What am I supposed to do if I would like to retrieve
only the file name?

That’s an interesting concept, but you know it’s basically hopeless,
right? The file type has almost nothing to do with the
compressibility of a file. There is some sense in trying
compression scheme A, and if it doesn’t seem to have done much,
trying compression scheme B and C and seeing which one is the best.
That’s basically what the current InfoZip tools do. But you can’t
really choose an algorithm based on the first few bytes or the
extension.

···

Ankita Juneja wrote:

Hello everyone! :slight_smile:

              So, I'm working on Linux

Ubuntu 12.04 and trying to make a GUI which -

               - asks the user to select

the desired file using FileDialog

               - then the user clicks on

a button which runs a shellscript on the terminal which
determines the type of file and what kind of compression would
be best for it and then compresses it.

-- Tim Roberts, Providenza & Boekelheide, Inc.

timr@probo.com

Thankyou Mark and Werner! :slight_smile: I did what you asked me to and was successful. This is what I did btw…
fileselect = wx.FileDialog(self, message=‘Choose file to open’, defaultDir=wx.GetHomeDir(), defaultFile=‘evaluation.doc’, style=wx.FD_OPEN)
if fileselect.ShowModal() == wx.ID_OK:
self.fileName = fileselect.GetFilename()
self.filePath = fileselect.GetPath()
self.path = os.path.dirname(self.filePath)**
self.name = os.path.basename(self.filePath)**
fileselect.Destroy()

    button = wx.Button(cpane, label="script")
        self.Bind(wx.EVT_BUTTON, self.button1, button)
        self.Bind(wx.EVT_CLOSE, self.closewindow)
           
def button1(self,event):
    **proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])**
    out, err = proc.communicate()
···

On Wed, Jul 2, 2014 at 10:30 PM, Tim Roberts timr@probo.com wrote:

Ankita Juneja wrote:

Hello everyone! :slight_smile:

              So, I'm working on Linux

Ubuntu 12.04 and trying to make a GUI which -

               - asks the user to select

the desired file using FileDialog

               - then the user clicks on

a button which runs a shellscript on the terminal which
determines the type of file and what kind of compression would
be best for it and then compresses it.

-- Tim Roberts, timr@probo.com
Providenza & Boekelheide, Inc.
That's an interesting concept, but you know it's basically hopeless,

right? The file type has almost nothing to do with the
compressibility of a file. There is some sense in trying
compression scheme A, and if it doesn’t seem to have done much,
trying compression scheme B and C and seeing which one is the best.
That’s basically what the current InfoZip tools do. But you can’t
really choose an algorithm based on the first few bytes or the
extension.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-users+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

That code will break if the user clicks cancel… as you’re getting the data from the fileselect object regardless of ShowModal returning wx.ID_OK or not… put those lines in the if that tests wx.ID_OK

Also, you’ll likely want to do the same for the button, or at least something, otherwise you might run into errors/exceptions…

You could do:
button = wx.Button(cpane, label=“script”)

if fileselect.ShowModal() == wx.ID_OK:

self.fileName = fileselect.GetFilename()
**self.filePath = fileselect.GetPath()**
**self.path = os.path.dirname(self.filePath)****    [self.name](http://self.name/) = os.path.basename(self.filePath)**

else:

button.Enable(False)

which will disable the button from being clicked. Of course you could also handle this in the button handler function:

def button1(self,event):

if not self.name is "":

proc = subprocess.Popen([‘inputscript’, self.name, self.path])

    out, err = proc.communicate()

else:

    #alert the user or do nothing
···

On Wednesday, July 2, 2014 12:31:18 PM UTC-7, Ankita Juneja wrote:

Thankyou Mark and Werner! :slight_smile: I did what you asked me to and was successful. This is what I did btw…
fileselect = wx.FileDialog(self, message=‘Choose file to open’, defaultDir=wx.GetHomeDir(), defaultFile=‘evaluation.doc’, style=wx.FD_OPEN)
if fileselect.ShowModal() == wx.ID_OK:
self.fileName = fileselect.GetFilename()
self.filePath = fileselect.GetPath()
self.path = os.path.dirname(self.filePath)**
self.name = os.path.basename(self.filePath)**
fileselect.Destroy()

    button = wx.Button(cpane, label="script")
        self.Bind(wx.EVT_BUTTON, self.button1, button)
        self.Bind(wx.EVT_CLOSE, self.closewindow)
           
def button1(self,event):
    **proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])**
    out, err = proc.communicate()

Hi Tim,

I actually tested various file types such as doc, text, pdf, ppt, mp3, mp4, jpeg, png with about 10 compression schemes in all(including zip, rar, bzip, zpaq, etc). My aim was infact to check if the compressibility differs for file types with the same scheme and also get the best compression ratio ofcourse. Yes, I now know that the file type has almost nothing to do with the
compressibility of a file. However, as a part of my final script, I’m still returning the file type to the user and thus mentioned the same earlier.

Thanks for showing interest in my concept though. I really appreciate any feedback and suggestions that may help make my work better. :slight_smile:

Thankyou all! :smiley:

On Wed, Jul 2, 2014 at 10:30 PM, Tim Roberts ti...@probo.com wrote:

Ankita Juneja wrote:

Hello everyone! :slight_smile:

              So, I'm working on Linux

Ubuntu 12.04 and trying to make a GUI which -

               - asks the user to select

the desired file using FileDialog

               - then the user clicks on

a button which runs a shellscript on the terminal which
determines the type of file and what kind of compression would
be best for it and then compresses it.

-- Tim Roberts, ti...@probo.com
Providenza & Boekelheide, Inc.
That's an interesting concept, but you know it's basically hopeless,

right? The file type has almost nothing to do with the
compressibility of a file. There is some sense in trying
compression scheme A, and if it doesn’t seem to have done much,
trying compression scheme B and C and seeing which one is the best.
That’s basically what the current InfoZip tools do. But you can’t
really choose an algorithm based on the first few bytes or the
extension.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-user...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

@Nathan -

Hello again! Please excuse me for the late reply. :slight_smile:
So, I thought about what you said, i.e., the code breaking if the user clicks on ‘cancel’ and here’s what I did.

status=self.CreateStatusBar()

	menubar=wx.MenuBar()

	first=wx.Menu()

	f_file = first.Append(wx.ID_FILE,"&File","Select a file")

	self.Bind(wx.EVT_MENU, self.OnClick, f_file)

	menubar.Append(first,"&File")

	self.SetMenuBar(menubar)

  	def OnClick(self, event):

		fileselect = wx.FileDialog(self, message='Choose file to open', defaultDir=wx.GetHomeDir(), defaultFile='evaluation.doc', style=wx.FD_OPEN) 

    	if fileselect.ShowModal() == wx.ID_OK:

            	self.fileName = fileselect.GetFilename()

		self.filePath = fileselect.GetPath()

		self.path = os.path.dirname(self.filePath)

		self.name = os.path.basename(self.filePath)

		fileselect.Destroy()

		button = wx.Button(self.cpane, label="compress")

    		self.Bind(wx.EVT_BUTTON, self.button1, button)

   

            

def button1(self,event):

	proc = subprocess.Popen(['inputscript', self.name, self.path])

	out, err = proc.communicate()

Now, the button to compress the file appears only after the user has selected the file. However, it still remains even after the file is compressed and one can press it again. I would like it to generate some sort of warning if pressed more than once, like, “Your file is already compressed. Select new file.” or for the button to disappear after it has been clicked once and the user to select the file again. Could you please help me with that?

Regards,
Ankita.

One way to accomplish this would be to have your button event, that starts the compression, disable the button as well. That way it can only be clicked once. Then when they select a new file to compress re-enable it.

···

On Sunday, July 6, 2014 4:54:00 PM UTC-4, Ankita Juneja wrote:

@Nathan -

Hello again! Please excuse me for the late reply. :slight_smile:
So, I thought about what you said, i.e., the code breaking if the user clicks on ‘cancel’ and here’s what I did.

status=self.CreateStatusBar()

  menubar=wx.MenuBar()
  first=wx.Menu()
  f_file = first.Append(wx.ID_FILE,"&File","Select a file")
  self.Bind(wx.EVT_MENU, self.OnClick, f_file)
  menubar.Append(first,"&File")
  self.SetMenuBar(menubar)
  	def OnClick(self, event):
		fileselect = wx.FileDialog(self, message='Choose file to open', defaultDir=wx.GetHomeDir(), defaultFile='evaluation.doc', style=wx.FD_OPEN) 
    	if fileselect.ShowModal() == wx.ID_OK:
            	self.fileName = fileselect.GetFilename()
  	self.filePath = fileselect.GetPath()
  	self.path = os.path.dirname(self.filePath)
  	[self.name](http://self.name) = os.path.basename(self.filePath)
  	fileselect.Destroy()
  	button = wx.Button(self.cpane, label="compress")
    		self.Bind(wx.EVT_BUTTON, self.button1, button)

def button1(self,event):

  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()

Now, the button to compress the file appears only after the user has selected the file. However, it still remains even after the file is compressed and one can press it again. I would like it to generate some sort of warning if pressed more than once, like, “Your file is already compressed. Select new file.” or for the button to disappear after it has been clicked once and the user to select the file again. Could you please help me with that?

Regards,
Ankita.

Thankyou Mike! :slight_smile:
I actually tried disabling it earlier but somehow the whole app would get disabled instead of the one button. Anyway, I used show() and hide() now. Works perfectly!

def button1Click(self,event):

	self.button1.Show()

	proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])

	out, err = proc.communicate()

	self.button1.Hide()
···

On Mon, Jul 7, 2014 at 5:32 PM, Mike Stover hakugin.gin@gmail.com wrote:

One way to accomplish this would be to have your button event, that starts the compression, disable the button as well. That way it can only be clicked once. Then when they select a new file to compress re-enable it.

On Sunday, July 6, 2014 4:54:00 PM UTC-4, Ankita Juneja wrote:

@Nathan -

Hello again! Please excuse me for the late reply. :slight_smile:
So, I thought about what you said, i.e., the code breaking if the user clicks on ‘cancel’ and here’s what I did.

status=self.CreateStatusBar()

  menubar=wx.MenuBar()
  first=wx.Menu()
  f_file = first.Append(wx.ID_FILE,"&File","Select a file")
  self.Bind(wx.EVT_MENU, self.OnClick, f_file)
  menubar.Append(first,"&File")
  self.SetMenuBar(menubar)
  	def OnClick(self, event):
		fileselect = wx.FileDialog(self, message='Choose file to open', defaultDir=wx.GetHomeDir(), defaultFile='evaluation.doc', style=wx.FD_OPEN) 
    	if fileselect.ShowModal() == wx.ID_OK:
            	self.fileName = fileselect.GetFilename()
  	self.filePath = fileselect.GetPath()
  	self.path = os.path.dirname(self.filePath)
  	[self.name](http://self.name) = os.path.basename(self.filePath)
  	fileselect.Destroy()
  	button = wx.Button(self.cpane, label="compress")
    		self.Bind(wx.EVT_BUTTON, self.button1, button)
def button1(self,event):
  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()

Now, the button to compress the file appears only after the user has selected the file. However, it still remains even after the file is compressed and one can press it again. I would like it to generate some sort of warning if pressed more than once, like, “Your file is already compressed. Select new file.” or for the button to disappear after it has been clicked once and the user to select the file again. Could you please help me with that?

Regards,
Ankita.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-users+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

There are a few things that can cause the app to appear disabled instead of the button being disabled. I tossed together a quick example app to demonstrate how I would enable / disable the button and attached it to this thread.

disable_button_test.py (1.55 KB)

···

On Monday, July 7, 2014 9:27:28 AM UTC-4, Ankita Juneja wrote:

Thankyou Mike! :slight_smile:
I actually tried disabling it earlier but somehow the whole app would get disabled instead of the one button. Anyway, I used show() and hide() now. Works perfectly!

def button1Click(self,event):

  self.button1.Show()
  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()
  self.button1.Hide()

On Mon, Jul 7, 2014 at 5:32 PM, Mike Stover hakug...@gmail.com wrote:

One way to accomplish this would be to have your button event, that starts the compression, disable the button as well. That way it can only be clicked once. Then when they select a new file to compress re-enable it.

On Sunday, July 6, 2014 4:54:00 PM UTC-4, Ankita Juneja wrote:

@Nathan -

Hello again! Please excuse me for the late reply. :slight_smile:
So, I thought about what you said, i.e., the code breaking if the user clicks on ‘cancel’ and here’s what I did.

status=self.CreateStatusBar()

  menubar=wx.MenuBar()
  first=wx.Menu()
  f_file = first.Append(wx.ID_FILE,"&File","Select a file")
  self.Bind(wx.EVT_MENU, self.OnClick, f_file)
  menubar.Append(first,"&File")
  self.SetMenuBar(menubar)
  	def OnClick(self, event):
		fileselect = wx.FileDialog(self, message='Choose file to open', defaultDir=wx.GetHomeDir(), defaultFile='evaluation.doc', style=wx.FD_OPEN) 
    	if fileselect.ShowModal() == wx.ID_OK:
            	self.fileName = fileselect.GetFilename()
  	self.filePath = fileselect.GetPath()
  	self.path = os.path.dirname(self.filePath)
  	[self.name](http://self.name) = os.path.basename(self.filePath)
  	fileselect.Destroy()
  	button = wx.Button(self.cpane, label="compress")
    		self.Bind(wx.EVT_BUTTON, self.button1, button)
def button1(self,event):
  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()

Now, the button to compress the file appears only after the user has selected the file. However, it still remains even after the file is compressed and one can press it again. I would like it to generate some sort of warning if pressed more than once, like, “Your file is already compressed. Select new file.” or for the button to disappear after it has been clicked once and the user to select the file again. Could you please help me with that?

Regards,
Ankita.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-user...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Thankyou Mike! :smiley: That really helped! Now, I can enable and disable only the button instead of the entire app. :slight_smile:

···

On Mon, Jul 7, 2014 at 7:26 PM, Mike Stover hakugin.gin@gmail.com wrote:

There are a few things that can cause the app to appear disabled instead of the button being disabled. I tossed together a quick example app to demonstrate how I would enable / disable the button and attached it to this thread.

On Monday, July 7, 2014 9:27:28 AM UTC-4, Ankita Juneja wrote:

Thankyou Mike! :slight_smile:

I actually tried disabling it earlier but somehow the whole app would get disabled instead of the one button. Anyway, I used show() and hide() now. Works perfectly!

def button1Click(self,event):
  self.button1.Show()
  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()
  self.button1.Hide()

On Mon, Jul 7, 2014 at 5:32 PM, Mike Stover hakug...@gmail.com wrote:

One way to accomplish this would be to have your button event, that starts the compression, disable the button as well. That way it can only be clicked once. Then when they select a new file to compress re-enable it.

On Sunday, July 6, 2014 4:54:00 PM UTC-4, Ankita Juneja wrote:

@Nathan -

Hello again! Please excuse me for the late reply. :slight_smile:
So, I thought about what you said, i.e., the code breaking if the user clicks on ‘cancel’ and here’s what I did.

status=self.CreateStatusBar()

  menubar=wx.MenuBar()
  first=wx.Menu()
  f_file = first.Append(wx.ID_FILE,"&File","Select a file")
  self.Bind(wx.EVT_MENU, self.OnClick, f_file)
  menubar.Append(first,"&File")
  self.SetMenuBar(menubar)
  	def OnClick(self, event):
		fileselect = wx.FileDialog(self, message='Choose file to open', defaultDir=wx.GetHomeDir(), defaultFile='evaluation.doc', style=wx.FD_OPEN) 
    	if fileselect.ShowModal() == wx.ID_OK:
            	self.fileName = fileselect.GetFilename()
  	self.filePath = fileselect.GetPath()
  	self.path = os.path.dirname(self.filePath)
  	[self.name](http://self.name) = os.path.basename(self.filePath)
  	fileselect.Destroy()
  	button = wx.Button(self.cpane, label="compress")
    		self.Bind(wx.EVT_BUTTON, self.button1, button)
def button1(self,event):
  proc = subprocess.Popen(['inputscript', [self.name](http://self.name), self.path])
  out, err = proc.communicate()

Now, the button to compress the file appears only after the user has selected the file. However, it still remains even after the file is compressed and one can press it again. I would like it to generate some sort of warning if pressed more than once, like, “Your file is already compressed. Select new file.” or for the button to disappear after it has been clicked once and the user to select the file again. Could you please help me with that?

Regards,
Ankita.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-user...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

You received this message because you are subscribed to a topic in the Google Groups “wxPython-users” group.

To unsubscribe from this topic, visit https://groups.google.com/d/topic/wxpython-users/7bP89Nyj-c8/unsubscribe.

To unsubscribe from this group and all its topics, send an email to wxpython-users+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.