mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 87e7a14ee3
			
		
	
	
		87e7a14ee3
		
			
		
	
	
	
	
		
			
			* Tkinter functions and constructors which need a default root window
  raise now RuntimeError with descriptive message instead of obscure
  AttributeError or NameError if it is not created yet or cannot
  be created automatically.
* Add tests for all functions which use default root window.
* Fix import in the pynche script.
(cherry picked from commit 3d569fd6dc)
		
	
			
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # base class for tk common dialogues
 | |
| #
 | |
| # this module provides a base class for accessing the common
 | |
| # dialogues available in Tk 4.2 and newer.  use filedialog,
 | |
| # colorchooser, and messagebox to access the individual
 | |
| # dialogs.
 | |
| #
 | |
| # written by Fredrik Lundh, May 1997
 | |
| #
 | |
| 
 | |
| __all__ = ["Dialog"]
 | |
| 
 | |
| from tkinter import Frame
 | |
| 
 | |
| 
 | |
| class Dialog:
 | |
| 
 | |
|     command = None
 | |
| 
 | |
|     def __init__(self, master=None, **options):
 | |
|         if not master:
 | |
|             master = options.get('parent')
 | |
|         self.master = master
 | |
|         self.options = options
 | |
| 
 | |
|     def _fixoptions(self):
 | |
|         pass # hook
 | |
| 
 | |
|     def _fixresult(self, widget, result):
 | |
|         return result # hook
 | |
| 
 | |
|     def show(self, **options):
 | |
| 
 | |
|         # update instance options
 | |
|         for k, v in options.items():
 | |
|             self.options[k] = v
 | |
| 
 | |
|         self._fixoptions()
 | |
| 
 | |
|         # we need a dummy widget to properly process the options
 | |
|         # (at least as long as we use Tkinter 1.63)
 | |
|         w = Frame(self.master)
 | |
| 
 | |
|         try:
 | |
| 
 | |
|             s = w.tk.call(self.command, *w._options(self.options))
 | |
| 
 | |
|             s = self._fixresult(w, s)
 | |
| 
 | |
|         finally:
 | |
| 
 | |
|             try:
 | |
|                 # get rid of the widget
 | |
|                 w.destroy()
 | |
|             except:
 | |
|                 pass
 | |
| 
 | |
|         return s
 |