@@ -36,10 +36,10 @@ class Query(Toplevel):
36
36
"""
37
37
def __init__ (self , parent , title , message , * , text0 = '' , used_names = {},
38
38
_htest = False , _utest = False ):
39
- """Create popup, do not return until tk widget destroyed.
39
+ """Create modal popup, return when destroyed.
40
40
41
- Additional subclass init must be done before calling 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().
43
43
44
44
title - string, title of popup dialog
45
45
message - string, informational message to display
@@ -48,15 +48,17 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
48
48
_htest - bool, change box location when running htest
49
49
_utest - bool, leave window hidden and not modal
50
50
"""
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.
55
52
self .message = message
56
53
self .text0 = text0
57
54
self .used_names = used_names
55
+
56
+ Toplevel .__init__ (self , parent )
57
+ self .withdraw () # Hide while configuring, especially geometry.
58
+ self .title (title )
58
59
self .transient (parent )
59
60
self .grab_set ()
61
+
60
62
windowingsystem = self .tk .call ('tk' , 'windowingsystem' )
61
63
if windowingsystem == 'aqua' :
62
64
try :
@@ -69,9 +71,9 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
69
71
self .protocol ("WM_DELETE_WINDOW" , self .cancel )
70
72
self .bind ('<Key-Return>' , self .ok )
71
73
self .bind ("<KP_Enter>" , self .ok )
72
- self . resizable ( height = False , width = False )
74
+
73
75
self .create_widgets ()
74
- self .update_idletasks () # Needed here for winfo_reqwidth below.
76
+ self .update_idletasks () # Need here for winfo_reqwidth below.
75
77
self .geometry ( # Center dialog over parent (or below htest box).
76
78
"+%d+%d" % (
77
79
parent .winfo_rootx () +
@@ -80,12 +82,19 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
80
82
((parent .winfo_height ()/ 2 - self .winfo_reqheight ()/ 2 )
81
83
if not _htest else 150 )
82
84
) )
85
+ self .resizable (height = False , width = False )
86
+
83
87
if not _utest :
84
88
self .deiconify () # Unhide now that geometry set.
85
89
self .wait_window ()
86
90
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.
89
98
self .frame = frame = Frame (self , padding = 10 )
90
99
frame .grid (column = 0 , row = 0 , sticky = 'news' )
91
100
frame .grid_columnconfigure (0 , weight = 1 )
@@ -99,19 +108,24 @@ def create_widgets(self, ok_text='OK'): # Call from override, if any.
99
108
exists = True , root = self .parent )
100
109
self .entry_error = Label (frame , text = ' ' , foreground = 'red' ,
101
110
font = 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
-
107
111
entrylabel .grid (column = 0 , row = 0 , columnspan = 3 , padx = 5 , sticky = W )
108
112
self .entry .grid (column = 0 , row = 1 , columnspan = 3 , padx = 5 , sticky = W + E ,
109
113
pady = [10 ,0 ])
110
114
self .entry_error .grid (column = 0 , row = 2 , columnspan = 3 , padx = 5 ,
111
115
sticky = 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
+
112
124
self .button_ok .grid (column = 1 , row = 99 , padx = 5 )
113
125
self .button_cancel .grid (column = 2 , row = 99 , padx = 5 )
114
126
127
+ def create_extra (self ): pass # Override to add widgets.
128
+
115
129
def showerror (self , message , widget = None ):
116
130
#self.bell(displayof=self)
117
131
(widget or self .entry_error )['text' ] = 'ERROR: ' + message
@@ -227,8 +241,8 @@ def __init__(self, parent, title, *, menuitem='', filepath='',
227
241
parent , title , message , text0 = menuitem ,
228
242
used_names = used_names , _htest = _htest , _utest = _utest )
229
243
230
- def create_widgets (self ):
231
- super (). create_widgets ()
244
+ def create_extra (self ):
245
+ "Add path widjets to rows 10-12."
232
246
frame = self .frame
233
247
pathlabel = Label (frame , anchor = 'w' , justify = 'left' ,
234
248
text = 'Help File Path: Enter URL or browse for file' )
@@ -319,16 +333,16 @@ def __init__(self, parent, title, *, cli_args='',
319
333
parent , title , message , text0 = cli_args ,
320
334
_htest = _htest , _utest = _utest )
321
335
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."
324
338
frame = self .frame
325
339
self .restartvar = BooleanVar (self , value = True )
326
340
restart = Checkbutton (frame , variable = self .restartvar , onvalue = True ,
327
341
offvalue = False , text = 'Restart shell' )
328
342
self .args_error = Label (frame , text = ' ' , foreground = 'red' ,
329
343
font = self .error_font )
330
344
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' )
332
346
self .args_error .grid (column = 0 , row = 12 , columnspan = 3 , padx = 5 ,
333
347
sticky = 'we' )
334
348
0 commit comments