mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Merge with 3.4
This commit is contained in:
commit
6883faf49b
2 changed files with 53 additions and 22 deletions
|
@ -139,30 +139,11 @@ might include the Tix libraries as well).
|
||||||
Can I have Tk events handled while waiting for I/O?
|
Can I have Tk events handled while waiting for I/O?
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
||||||
Yes, and you don't even need threads! But you'll have to restructure your I/O
|
On platforms other than Windows, yes, and you don't even
|
||||||
|
need threads! But you'll have to restructure your I/O
|
||||||
code a bit. Tk has the equivalent of Xt's :c:func:`XtAddInput()` call, which allows you
|
code a bit. Tk has the equivalent of Xt's :c:func:`XtAddInput()` call, which allows you
|
||||||
to register a callback function which will be called from the Tk mainloop when
|
to register a callback function which will be called from the Tk mainloop when
|
||||||
I/O is possible on a file descriptor. Here's what you need::
|
I/O is possible on a file descriptor. See :ref:`tkinter-file-handlers`.
|
||||||
|
|
||||||
from Tkinter import tkinter
|
|
||||||
tkinter.createfilehandler(file, mask, callback)
|
|
||||||
|
|
||||||
The file may be a Python file or socket object (actually, anything with a
|
|
||||||
fileno() method), or an integer file descriptor. The mask is one of the
|
|
||||||
constants tkinter.READABLE or tkinter.WRITABLE. The callback is called as
|
|
||||||
follows::
|
|
||||||
|
|
||||||
callback(file, mask)
|
|
||||||
|
|
||||||
You must unregister the callback when you're done, using ::
|
|
||||||
|
|
||||||
tkinter.deletefilehandler(file)
|
|
||||||
|
|
||||||
Note: since you don't know *how many bytes* are available for reading, you can't
|
|
||||||
use the Python file object's read or readline methods, since these will insist
|
|
||||||
on reading a predefined number of bytes. For sockets, the :meth:`recv` or
|
|
||||||
:meth:`recvfrom` methods will work fine; for other files, use
|
|
||||||
``os.read(file.fileno(), maxbytecount)``.
|
|
||||||
|
|
||||||
|
|
||||||
I can't get key bindings to work in Tkinter: why?
|
I can't get key bindings to work in Tkinter: why?
|
||||||
|
|
|
@ -794,3 +794,53 @@ some widget (e.g. labels, buttons, menus). In these cases, Tk will not keep a
|
||||||
reference to the image. When the last Python reference to the image object is
|
reference to the image. When the last Python reference to the image object is
|
||||||
deleted, the image data is deleted as well, and Tk will display an empty box
|
deleted, the image data is deleted as well, and Tk will display an empty box
|
||||||
wherever the image was used.
|
wherever the image was used.
|
||||||
|
|
||||||
|
|
||||||
|
.. _tkinter-file-handlers:
|
||||||
|
|
||||||
|
File Handlers
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Tk allows you to register and unregister a callback function which will be
|
||||||
|
called from the Tk mainloop when I/O is possible on a file descriptor.
|
||||||
|
Only one handler may be registered per file descriptor. Example code::
|
||||||
|
|
||||||
|
import tkinter
|
||||||
|
widget = tkinter.Tk()
|
||||||
|
mask = tkinter.READABLE | tkinter.WRITABLE
|
||||||
|
widget.tk.createfilehandler(file, mask, callback)
|
||||||
|
...
|
||||||
|
widget.tk.deletefilehandler(file)
|
||||||
|
|
||||||
|
This feature is not available on Windows.
|
||||||
|
|
||||||
|
Since you don't know how many bytes are available for reading, you may not
|
||||||
|
want to use the :class:`~io.BufferedIOBase` or :class:`~io.TextIOBase`
|
||||||
|
:meth:`~io.BufferedIOBase.read` or :meth:`~io.IOBase.readline` methods,
|
||||||
|
since these will insist on reading a predefined number of bytes.
|
||||||
|
For sockets, the :meth:`~socket.socket.recv` or
|
||||||
|
:meth:`~socket.socket.recvfrom` methods will work fine; for other files,
|
||||||
|
use raw reads or ``os.read(file.fileno(), maxbytecount)``.
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: Widget.tk.createfilehandler(file, mask, func)
|
||||||
|
|
||||||
|
Registers the file handler callback function *func*. The *file* argument
|
||||||
|
may either be an object with a :meth:`~io.IOBase.fileno` method (such as
|
||||||
|
a file or socket object), or an integer file descriptor. The *mask*
|
||||||
|
argument is an ORed combination of any of the three constants below.
|
||||||
|
The callback is called as follows::
|
||||||
|
|
||||||
|
callback(file, mask)
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: Widget.tk.deletefilehandler(file)
|
||||||
|
|
||||||
|
Unregisters a file handler.
|
||||||
|
|
||||||
|
|
||||||
|
.. data:: READABLE
|
||||||
|
WRITABLE
|
||||||
|
EXCEPTION
|
||||||
|
|
||||||
|
Constants used in the *mask* arguments.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue