Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 12 additions & 13 deletions Doc/library/dialog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -209,19 +209,16 @@ string, an empty tuple, an empty list or ``None``.

.. class:: Open(master=None, **options)
SaveAs(master=None, **options)
Directory(master=None, **options)

The above two classes provide native dialog windows for saving and loading
files.
The above three classes provide native dialog windows for loading and saving
files and for selecting a directory.

**Convenience classes**

The below classes are used for creating file/directory windows from scratch.
These do not emulate the native look-and-feel of the platform.

.. class:: Directory(master=None, **options)

Create a dialog prompting the user to select a directory.

.. note:: The *FileDialog* class should be subclassed for custom event
handling and behaviour.

Expand Down Expand Up @@ -361,23 +358,25 @@ the classic (non-themed) Tk widgets.

.. data:: DIALOG_ICON

The name of the default bitmap (``'questhead'``) displayed by a
:class:`Dialog`.
The name of a bitmap (``'questhead'``) suitable for use as the *bitmap*
of a :class:`Dialog`.

.. class:: Dialog(master=None, cnf={}, **kw)

Display a modal dialog box built from the classic (non-themed) Tk widgets
and wait for the user to press one of its buttons.
The options, given through *cnf* or as keyword arguments, include *title*
(the window title), *text* (the message), *bitmap* (an icon,
:data:`DIALOG_ICON` by default), *default* (the index of the default button)
and *strings* (the sequence of button labels).
The options, given through *cnf* or as keyword arguments, are all required:
*title* (the window title), *text* (the message), *bitmap* (the name of a
bitmap icon, such as :data:`DIALOG_ICON`), *default* (the index of the
default button) and *strings* (the sequence of button labels).
After construction, the :attr:`!num` attribute holds the index of the button
the user pressed.

.. method:: destroy()

Destroy the dialog window.
Do nothing.
The dialog window is destroyed automatically before the constructor
returns, so there is nothing left for this method to do.


.. seealso::
Expand Down
4 changes: 1 addition & 3 deletions Doc/library/tkinter.messagebox.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ a variety of convenience methods for commonly used configurations.
The message boxes are modal: each blocks until the user responds, then returns
a value that depends on the function.
The ``show*`` functions and :meth:`Message.show` return the symbolic name of
the button the user pressed, as a string (such as :data:`OK` or :data:`YES`),
while the ``ask*`` functions return a :class:`bool` or ``None`` (see each
function below).
the button the user pressed, as a string (such as :data:`OK` or :data:`YES`).
Common message box styles and layouts include but are not limited to:

.. figure:: tk_msg.png
Expand Down
15 changes: 8 additions & 7 deletions Doc/library/tkinter.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2356,8 +2356,8 @@ Base and mixin classes
If all four arguments are given, the window manager keeps the ratio
between ``minNumer/minDenom`` and ``maxNumer/maxDenom``; passing empty
strings removes any existing restriction.
With no arguments, return a tuple of the four current values, or an empty
string if no aspect restriction is in effect.
With no arguments, return a tuple of the four current values, or ``None``
if no aspect restriction is in effect.
:meth:`wm_aspect` is an alias of :meth:`!aspect`.

.. method:: wm_attributes(*args, return_python_dict=False, **kwargs)
Expand Down Expand Up @@ -2582,8 +2582,8 @@ Base and mixin classes
window's internally requested size, and *widthInc* and *heightInc* are
the pixel sizes of a horizontal and vertical grid unit.
Empty strings turn off gridded management.
With no arguments, return a tuple of the four current values, or an empty
string if the window is not gridded.
With no arguments, return a tuple of the four current values, or ``None``
if the window is not gridded.
:meth:`wm_grid` is an alias of :meth:`!grid`.

Not to be confused with the grid geometry manager :meth:`Grid.grid`.
Expand Down Expand Up @@ -2696,8 +2696,8 @@ Base and mixin classes
Set or query a hint to the window manager about where the window's icon
should be positioned.
Empty strings cancel an existing hint.
With no arguments, return a tuple of the two current values, or an empty
string if no hint is in effect.
With no arguments, return a tuple of the two current values, or ``None``
if no hint is in effect.
:meth:`wm_iconposition` is an alias of :meth:`!iconposition`.

.. method:: wm_iconwindow(pathName=None)
Expand Down Expand Up @@ -2766,7 +2766,8 @@ Base and mixin classes
When this flag is set, the window is ignored by the window manager: it is
not reparented into a decorative frame and the user cannot manipulate it
through the usual window manager controls.
With no argument, return a boolean indicating whether the flag is set.
With no argument, return a boolean indicating whether the flag is set,
or ``None`` if it has not been set.
The flag is reliably honored only when the window is first mapped or
remapped from the withdrawn state.
:meth:`wm_overrideredirect` is an alias of :meth:`!overrideredirect`.
Expand Down
19 changes: 13 additions & 6 deletions Doc/library/tkinter.ttk.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ To override the basic Tk widgets, the import should follow the Tk import::

That code causes several :mod:`!tkinter.ttk` widgets (:class:`Button`,
:class:`Checkbutton`, :class:`Entry`, :class:`Frame`, :class:`Label`,
:class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`,
:class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`) to
:class:`LabelFrame`, :class:`Menubutton`, :class:`OptionMenu`,
:class:`PanedWindow`, :class:`Radiobutton`, :class:`Scale`,
:class:`Scrollbar` and :class:`Spinbox`) to
automatically replace the Tk widgets.

This has the direct benefit of using the new widgets which gives a better look
Expand Down Expand Up @@ -883,8 +884,8 @@ This widget accepts the following specific options:
The *selectmode* option gained the values ``"single"`` and ``"multiple"``;
the new widget options *selecttype* (``"item"`` or ``"cell"`` selection),
*striped* (zebra-striped rows), and *titlecolumns* / *titleitems* (columns
or rows frozen against scrolling) were introduced; and items gained a
*hidden* option.
or rows frozen against scrolling) were introduced; the column *separator*
option was added; and items gained a *hidden* option.
Tk 9.1 added the *rowheight* and *headingheight* options.


Expand Down Expand Up @@ -1039,6 +1040,9 @@ ttk.Treeview
The minimum width of the column in pixels. The treeview widget will
not make the column any smaller than specified by this option when
the widget is resized or the user drags a column.
*separator*: ``True``/``False``
Specifies whether a column separator should be drawn to the right of
the column.
*stretch*: ``True``/``False``
Specifies whether the column's width should be adjusted when
the widget is resized.
Expand Down Expand Up @@ -2167,8 +2171,11 @@ and inherits the common methods of :class:`Widget`.
display in the menu.
A *command* keyword argument may be given to specify a callable that is
invoked with the selected value whenever the selection changes; the *style*
keyword argument sets the style used by the underlying menubutton; and the
*name* keyword argument sets the Tk widget name.
keyword argument sets the style used by the underlying menubutton; the
*direction* keyword argument sets where the menu is posted relative to the
menubutton (one of ``'above'``, ``'below'`` (the default), ``'left'``,
``'right'`` or ``'flush'``); and the *name* keyword argument sets the Tk
widget name.

.. method:: set_menu(default=None, *values)

Expand Down
4 changes: 2 additions & 2 deletions Lib/tkinter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Tkinter provides classes which allow the display, positioning and
control of widgets. Toplevel widgets are Tk and Toplevel. Other
widgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton,
Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox
Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox,
LabelFrame and PanedWindow.

Properties of the widgets are specified with keyword arguments.
Expand Down Expand Up @@ -2528,7 +2528,7 @@ def wm_iconphoto(self, default=False, *args): # new in Tk 8.5

def wm_iconposition(self, x=None, y=None):
"""Set the position of the icon of this widget to X and Y. Return
a tuple of the current values of X and X if None is given."""
a tuple of the current values of X and Y if None is given."""
return self._getints(self.tk.call(
'wm', 'iconposition', self._w, x, y))

Expand Down
2 changes: 2 additions & 0 deletions Lib/tkinter/colorchooser.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"""Interface to the native Tk color selection dialog."""

# tk common color chooser dialogue
#
# this module provides an interface to the native color dialogue
Expand Down
2 changes: 2 additions & 0 deletions Lib/tkinter/commondialog.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"""Base class for the Tk common dialogs."""

# base class for tk common dialogues
#
# this module provides a base class for accessing the common
Expand Down
7 changes: 6 additions & 1 deletion Lib/tkinter/dialog.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# dialog.py -- Tkinter interface to the tk_dialog script.

"""Classic Tk dialog box, wrapping the tk_dialog script."""

from tkinter import _cnfmerge, Widget, TclError, Button, Pack

__all__ = ["Dialog"]
Expand All @@ -8,6 +10,8 @@


class Dialog(Widget):
"""A modal dialog box built from the classic (non-themed) Tk widgets."""

def __init__(self, master=None, cnf={}, **kw):
cnf = _cnfmerge((cnf, kw))
self.widgetName = '__dialog__'
Expand All @@ -21,7 +25,8 @@ def __init__(self, master=None, cnf={}, **kw):
try: Widget.destroy(self)
except TclError: pass

def destroy(self): pass
def destroy(self):
"""Do nothing; the dialog window is already destroyed."""


def _test():
Expand Down
2 changes: 2 additions & 0 deletions Lib/tkinter/font.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"""Utilities to help work with fonts in Tkinter."""

# Tkinter font wrapper
#
# written by Fredrik Lundh, February 1998
Expand Down
2 changes: 2 additions & 0 deletions Lib/tkinter/messagebox.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"""Interface to the standard Tk message boxes."""

# tk common message boxes
#
# this module provides an interface to the native message boxes
Expand Down
2 changes: 1 addition & 1 deletion Lib/tkinter/simpledialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# fredrik@pythonware.com
# http://www.pythonware.com
#
"""This modules handles dialog boxes.
"""This module handles dialog boxes.
It contains the following public symbols:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix the :program:`configure` check for Tcl/Tk which could wrongly succeed
with optimizing compilers when the libraries are missing.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fixed a bug in free-threaded builds where the active exception could be
unexpectedly cleared during subtype deallocation in ``subtype_dealloc()``.
10 changes: 10 additions & 0 deletions Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -2833,6 +2833,13 @@ subtype_dealloc(PyObject *self)
}
}

/* Save the current exception: clear_slots() and the dict/base-dealloc
below decref arbitrary attribute values, which may clear
tstate->current_exception (gh-89373). Mirroring slot_tp_finalize(). */
PyThreadState *tstate = _PyThreadState_GET();
PyObject *exc = _PyErr_GetRaisedException(tstate); /* preserve in-flight exception */


/* Clear slots up to the nearest base with a different tp_dealloc */
base = type;
while ((basedealloc = base->tp_dealloc) == subtype_dealloc) {
Expand Down Expand Up @@ -2882,6 +2889,9 @@ subtype_dealloc(PyObject *self)
if (type_needs_decref) {
_Py_DECREF_TYPE(type);
}

/* Restore the saved exception (see save above). */
_PyErr_SetRaisedException(tstate, exc);
}

static PyTypeObject *solid_base(PyTypeObject *type);
Expand Down
4 changes: 2 additions & 2 deletions configure

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -4618,8 +4618,8 @@ WITH_SAVE_ENV([
# error "Tk older than 8.5.12 not supported"
#endif
], [
void *x1 = Tcl_Init;
void *x2 = Tk_Init;
Tcl_Init(NULL);
Tk_Init(NULL);
])
], [
have_tcltk=yes
Expand Down
Loading