@@ -36,10 +36,10 @@ class Query(Toplevel):
3636 """
3737def __init__ (self ,parent ,title ,message ,* ,text0 = '' ,used_names = {},
3838_htest = False ,_utest = False ):
39- """Create popup,do not returnuntil tk widget destroyed.
39+ """Createmodal popup, returnwhen destroyed.
4040
41- Additional subclass init must be done beforecalling this
42- unless _utest=True is passed to suppress wait_window().
41+ Additional subclass init must be done before this unless
42+ _utest=True is passed to suppress wait_window().
4343
4444 title - string, title of popup dialog
4545 message - string, informational message to display
@@ -48,15 +48,17 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
4848 _htest - bool, change box location when running htest
4949 _utest - bool, leave window hidden and not modal
5050 """
51- Toplevel .__init__ (self ,parent )
52- self .withdraw ()# Hide while configuring, especially geometry.
53- self .parent = parent
54- self .title (title )
51+ self .parent = parent # Needed for Font call.
5552self .message = message
5653self .text0 = text0
5754self .used_names = used_names
55+
56+ Toplevel .__init__ (self ,parent )
57+ self .withdraw ()# Hide while configuring, especially geometry.
58+ self .title (title )
5859self .transient (parent )
5960self .grab_set ()
61+
6062windowingsystem = self .tk .call ('tk' ,'windowingsystem' )
6163if windowingsystem == 'aqua' :
6264try :
@@ -69,9 +71,9 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
6971self .protocol ("WM_DELETE_WINDOW" ,self .cancel )
7072self .bind ('<Key-Return>' ,self .ok )
7173self .bind ("<KP_Enter>" ,self .ok )
72- self . resizable ( height = False , width = False )
74+
7375self .create_widgets ()
74- self .update_idletasks ()#Needed here for winfo_reqwidth below.
76+ self .update_idletasks ()#Need here for winfo_reqwidth below.
7577self .geometry (# Center dialog over parent (or below htest box).
7678"+%d+%d" % (
7779parent .winfo_rootx ()+
@@ -80,12 +82,19 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
8082 ((parent .winfo_height ()/ 2 - self .winfo_reqheight ()/ 2 )
8183if not _htest else 150 )
8284 ) )
85+ self .resizable (height = False ,width = False )
86+
8387if not _utest :
8488self .deiconify ()# Unhide now that geometry set.
8589self .wait_window ()
8690
87- def create_widgets (self ,ok_text = 'OK' ):# Call from override, if any.
88- # Bind to self widgets needed for entry_ok or unittest.
91+ def create_widgets (self ,ok_text = 'OK' ):# Do not replace.
92+ """Create entry (rows, extras, buttons.
93+
94+ Entry stuff on rows 0-2, spanning cols 0-2.
95+ Buttons on row 99, cols 1, 2.
96+ """
97+ # Bind to self the widgets needed for entry_ok or unittest.
8998self .frame = frame = Frame (self ,padding = 10 )
9099frame .grid (column = 0 ,row = 0 ,sticky = 'news' )
91100frame .grid_columnconfigure (0 ,weight = 1 )
@@ -99,19 +108,24 @@ def create_widgets(self, ok_text='OK'): # Call from override, if any.
99108exists = True ,root = self .parent )
100109self .entry_error = Label (frame ,text = ' ' ,foreground = 'red' ,
101110font = self .error_font )
102- self .button_ok = Button (
103- frame ,text = ok_text ,default = 'active' ,command = self .ok )
104- self .button_cancel = Button (
105- frame ,text = 'Cancel' ,command = self .cancel )
106-
107111entrylabel .grid (column = 0 ,row = 0 ,columnspan = 3 ,padx = 5 ,sticky = W )
108112self .entry .grid (column = 0 ,row = 1 ,columnspan = 3 ,padx = 5 ,sticky = W + E ,
109113pady = [10 ,0 ])
110114self .entry_error .grid (column = 0 ,row = 2 ,columnspan = 3 ,padx = 5 ,
111115sticky = W + E )
116+
117+ self .create_extra ()
118+
119+ self .button_ok = Button (
120+ frame ,text = ok_text ,default = 'active' ,command = self .ok )
121+ self .button_cancel = Button (
122+ frame ,text = 'Cancel' ,command = self .cancel )
123+
112124self .button_ok .grid (column = 1 ,row = 99 ,padx = 5 )
113125self .button_cancel .grid (column = 2 ,row = 99 ,padx = 5 )
114126
127+ def create_extra (self ):pass # Override to add widgets.
128+
115129def showerror (self ,message ,widget = None ):
116130#self.bell(displayof=self)
117131 (widget or self .entry_error )['text' ]= 'ERROR: ' + message
@@ -227,8 +241,8 @@ def __init__(self, parent, title, *, menuitem='', filepath='',
227241parent ,title ,message ,text0 = menuitem ,
228242used_names = used_names ,_htest = _htest ,_utest = _utest )
229243
230- def create_widgets (self ):
231- super (). create_widgets ()
244+ def create_extra (self ):
245+ "Add path widjets to rows 10-12."
232246frame = self .frame
233247pathlabel = Label (frame ,anchor = 'w' ,justify = 'left' ,
234248text = 'Help File Path: Enter URL or browse for file' )
@@ -319,16 +333,16 @@ def __init__(self, parent, title, *, cli_args='',
319333parent ,title ,message ,text0 = cli_args ,
320334_htest = _htest ,_utest = _utest )
321335
322- def create_widgets (self ):
323- super (). create_widgets ( ok_text = 'Run' )
336+ def create_extra (self ):
337+ "Add run mode on rows 10-12."
324338frame = self .frame
325339self .restartvar = BooleanVar (self ,value = True )
326340restart = Checkbutton (frame ,variable = self .restartvar ,onvalue = True ,
327341offvalue = False ,text = 'Restart shell' )
328342self .args_error = Label (frame ,text = ' ' ,foreground = 'red' ,
329343font = self .error_font )
330344
331- restart .grid (column = 0 ,row = 4 ,columnspan = 3 ,padx = 5 ,sticky = 'w' )
345+ restart .grid (column = 0 ,row = 10 ,columnspan = 3 ,padx = 5 ,sticky = 'w' )
332346self .args_error .grid (column = 0 ,row = 12 ,columnspan = 3 ,padx = 5 ,
333347sticky = 'we' )
334348