]> granicus.if.org Git - python/commitdiff
Fixed several bugs reported by Greg McFarmane:
authorGuido van Rossum <guido@python.org>
Mon, 29 Dec 1997 19:59:33 +0000 (19:59 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 29 Dec 1997 19:59:33 +0000 (19:59 +0000)
 *  The invoke methods of the three Tkinter widgets Button,
    Checkbutton and Radiobutton should return the value returned by
    the callback, (like the Menu widget does):

def invoke(self):
    return self.tk.call(self._w, 'invoke')

 *  The select_from method of the Canvas widget should use 'from', not
    'set':

def select_from(self, tagOrId, index):
    self.tk.call(self._w, 'select', 'from', tagOrId, index)

    Currently, if you use select_from, you get the error message:
 'TclError: bad select option "set": must be adjust, clear, from, item, or to'

 *  The 'entrycget' and 'type' methods of the Tk menu widget are
    missing from Tkinter.

 *  There is a bug in grid_columnconfigure and grid_rowconfigure.  For
    example, this should return the current value of the 'minsize'
    option for column 0:

f.grid_columnconfigure(0, 'minsize')

    Instead it returns the same as:

f.grid_columnconfigure(0)

    I suggest that the hint given in the comment in the
    Tkinter.Misc.configure method should be followed - "ought to
    generalize this so tag_config etc.  can use it".  Repeating the
    same configure code several times in Tkinter is inviting errors.
    [I did not follow this advice --G]

 *  The grid_slaves method should handle options.  Currently, to pass
    options to the grid_slaves method, you have to do something like:

grid_slaves('-row', 1)

Lib/lib-tk/Tkinter.py

index da8bdf9d45def07ae1b51a17372ccb36875653a3..4720a03ab9959a056a017d163e51b40435bf7786 100644 (file)
@@ -630,14 +630,18 @@ class Misc:
                        self.tk.call(
                                'grid', 'bbox', self._w, column, row)) or None
        bbox = grid_bbox
-       def grid_columnconfigure(self, index, cnf={}, **kw):
-               if type(cnf) is not DictionaryType and not kw:
-                       options = self._options({cnf: None})
+       def _grid_configure(self, command, index, cnf, kw):
+               if type(cnf) is StringType and not kw:
+                       if cnf[-1:] == '_':
+                               cnf = cnf[:-1]
+                       if cnf[:1] != '-':
+                               cnf = '-'+cnf
+                       options = (cnf,)
                else:
                        options = self._options(cnf, kw)
                if not options:
                        res = self.tk.call('grid',
-                                          'columnconfigure', self._w, index)
+                                          command, self._w, index)
                        words = self.tk.splitlist(res)
                        dict = {}
                        for i in range(0, len(words), 2):
@@ -652,12 +656,15 @@ class Misc:
                                dict[key] = value
                        return dict
                res = apply(self.tk.call, 
-                             ('grid', 'columnconfigure', self._w, index) 
+                             ('grid', command, self._w, index) 
                              + options)
-               if options == ('-minsize', None):
-                       return self.tk.getint(res) or None
-               elif options == ('-weight', None):
-                       return self.tk.getdouble(res) or None
+               if len(options) == 1:
+                       if not res: return None
+                       # In Tk 7.5, -width can be a float
+                       if '.' in res: return self.tk.getdouble(res)
+                       return self.tk.getint(res)
+       def grid_columnconfigure(self, index, cnf={}, **kw):
+               return self._grid_configure('columnconfigure', index, cnf, kw)
        columnconfigure = grid_columnconfigure
        def grid_propagate(self, flag=_noarg_):
                if flag is Misc._noarg_:
@@ -666,40 +673,18 @@ class Misc:
                else:
                        self.tk.call('grid', 'propagate', self._w, flag)
        def grid_rowconfigure(self, index, cnf={}, **kw):
-               if type(cnf) is not DictionaryType and not kw:
-                       options = self._options({cnf: None})
-               else:
-                       options = self._options(cnf, kw)
-               if not options:
-                       res = self.tk.call('grid',
-                                          'rowconfigure', self._w, index)
-                       words = self.tk.splitlist(res)
-                       dict = {}
-                       for i in range(0, len(words), 2):
-                               key = words[i][1:]
-                               value = words[i+1]
-                               if not value:
-                                       value = None
-                               elif '.' in value:
-                                       value = self.tk.getdouble(value)
-                               else:
-                                       value = self.tk.getint(value)
-                               dict[key] = value
-                       return dict
-               res = apply(self.tk.call, 
-                             ('grid', 'rowconfigure', self._w, index) 
-                             + options)
-               if len(options) == 2 and options[-1] is None:
-                       if not res: return None
-                       # In Tk 7.5, -width can be a float
-                       if '.' in res: return self.tk.getdouble(res)
-                       return self.tk.getint(res)
+               return self._grid_configure('rowconfigure', index, cnf, kw)
        rowconfigure = grid_rowconfigure
        def grid_size(self):
                return self._getints(
                        self.tk.call('grid', 'size', self._w)) or None
        size = grid_size
-       def grid_slaves(self, *args):
+       def grid_slaves(self, master, row=None, column=None):
+               args = (master,)
+               if row:
+                       args = args + ('-row', row)
+               if column:
+                       args = args + ('-column', column)
                return map(self._nametowidget,
                           self.tk.splitlist(
                                   apply(self.tk.call,
@@ -1085,7 +1070,7 @@ class Button(Widget):
        def flash(self):
                self.tk.call(self._w, 'flash')
        def invoke(self):
-               self.tk.call(self._w, 'invoke')
+               return self.tk.call(self._w, 'invoke')
 
 # Indices:
 # XXX I don't like these -- take them away
@@ -1238,7 +1223,7 @@ class Canvas(Widget):
        def select_clear(self):
                self.tk.call(self._w, 'select', 'clear')
        def select_from(self, tagOrId, index):
-               self.tk.call(self._w, 'select', 'set', tagOrId, index)
+               self.tk.call(self._w, 'select', 'from', tagOrId, index)
        def select_item(self):
                self.tk.call(self._w, 'select', 'item')
        def select_to(self, tagOrId, index):
@@ -1262,7 +1247,7 @@ class Checkbutton(Widget):
        def flash(self):
                self.tk.call(self._w, 'flash')
        def invoke(self):
-               self.tk.call(self._w, 'invoke')
+               return self.tk.call(self._w, 'invoke')
        def select(self):
                self.tk.call(self._w, 'select')
        def toggle(self):
@@ -1445,6 +1430,8 @@ class Menu(Widget):
                self.insert(index, 'separator', cnf or kw)
        def delete(self, index1, index2=None):
                self.tk.call(self._w, 'delete', index1, index2)
+       def entrycget(self, index, option):
+               return self.tk.call(self._w, 'entrycget', '-' + option)
        def entryconfigure(self, index, cnf=None, **kw):
                if cnf is None and not kw:
                        cnf = {}
@@ -1467,6 +1454,8 @@ class Menu(Widget):
                return self.tk.call(self._w, 'invoke', index)
        def post(self, x, y):
                self.tk.call(self._w, 'post', x, y)
+       def type(self, index):
+               return self.tk.call(self._w, 'type', index)
        def unpost(self):
                self.tk.call(self._w, 'unpost')
        def yposition(self, index):
@@ -1489,7 +1478,7 @@ class Radiobutton(Widget):
        def flash(self):
                self.tk.call(self._w, 'flash')
        def invoke(self):
-               self.tk.call(self._w, 'invoke')
+               return self.tk.call(self._w, 'invoke')
        def select(self):
                self.tk.call(self._w, 'select')