Returning a value from a Tk dialog

  • Thread starter Gordon Airporte
  • Start date
G

Gordon Airporte

The dialogs in tkColorChooser, tkFileDialog, etc. return useful values
from their creation somehow, so I can do stuff like this:

filename = tkFileDialog.askopenfilename( master=self )

I would like to make a Yes/No/Cancel dialog that can be used the same
way (returning 1/0/-1), but I just cannot figure out how to do it. At
best I've been able to get some kind of instance id from the object. How
does this work?
 
R

Ron Adam

Gordon said:
The dialogs in tkColorChooser, tkFileDialog, etc. return useful values
from their creation somehow, so I can do stuff like this:

filename = tkFileDialog.askopenfilename( master=self )

I would like to make a Yes/No/Cancel dialog that can be used the same
way (returning 1/0/-1), but I just cannot figure out how to do it. At
best I've been able to get some kind of instance id from the object. How
does this work?

All of the dialogs you mention use functions as a caller. And then the
function is returning the result.


From tkColorChooser...

def askcolor(color = None, **options):
"Ask for a color"

if color:
options = options.copy()
options["initialcolor"] = color

return Chooser(**options).show()


In this case the Chooser(**options) initiates the dialog, and then the
show() method is called and it returns the value. The return line above
is the same as...

cc = Chooser(**options)
color = cc.show()
return color

The other dialogs work in same way. They are all based on
tkCommonDialog, so look in tkCommonDialog.py to see exactly what's going on.

Cheers,
Ron
 
F

Fredrik Lundh

Gordon said:
The dialogs in tkColorChooser, tkFileDialog, etc. return useful values
from their creation somehow, so I can do stuff like this:

filename = tkFileDialog.askopenfilename( master=self )

I would like to make a Yes/No/Cancel dialog that can be used the same
way (returning 1/0/-1), but I just cannot figure out how to do it. At
best I've been able to get some kind of instance id from the object. How
does this work?

if you want a message box, use the tkMessageBox module. there's
no ready-made wrapper for yes/no/cancel, but you can call the _show
directly:

import tkMessageBox
result = tkMessageBox._show(
"title", "message", tkMessageBox.QUESTION, tkMessageBox.YESNOCANCEL
)

result will be tkMessageBox.YES, tkMessageBox.NO, or tkMessageBox.CANCEL.

if result == tkMessageBox.YES:
return 1
if result == tkMessageNox.No:
return 0
return -1 # assume cancel

</F>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,270
Messages
2,571,349
Members
48,035
Latest member
SamuelDieng

Latest Threads

Top