Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
6883faf4
Commit
6883faf4
authored
May 17, 2015
by
Terry Jan Reedy
Browse files
Options
Browse Files
Download
Plain Diff
Merge with 3.4
parents
fdb23c2f
d986563a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
22 deletions
+53
-22
Doc/faq/gui.rst
Doc/faq/gui.rst
+3
-22
Doc/library/tkinter.rst
Doc/library/tkinter.rst
+50
-0
No files found.
Doc/faq/gui.rst
View file @
6883faf4
...
@@ -139,30 +139,11 @@ might include the Tix libraries as well).
...
@@ -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?
...
...
Doc/library/tkinter.rst
View file @
6883faf4
...
@@ -794,3 +794,53 @@ some widget (e.g. labels, buttons, menus). In these cases, Tk will not keep a
...
@@ -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.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment