100% found this document useful (1 vote)
7 views

(Ebook) Modern Tkinter for Busy Python Developers: Quickly learn to create great looking user interfaces for Windows, Mac and Linux using Python's standard GUI toolkit by Mark Roseman ISBN 9781999149567, 1999149564 instant download

The document is an overview of the ebook 'Modern Tkinter for Busy Python Developers' by Mark Roseman, which aims to teach users how to create user interfaces using Python's Tkinter toolkit across multiple operating systems. It covers installation, basic concepts, widget management, and advanced topics in GUI design. The tutorial is designed for developers familiar with programming and focuses on modern best practices for building effective Tkinter applications.

Uploaded by

udohmogle
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
7 views

(Ebook) Modern Tkinter for Busy Python Developers: Quickly learn to create great looking user interfaces for Windows, Mac and Linux using Python's standard GUI toolkit by Mark Roseman ISBN 9781999149567, 1999149564 instant download

The document is an overview of the ebook 'Modern Tkinter for Busy Python Developers' by Mark Roseman, which aims to teach users how to create user interfaces using Python's Tkinter toolkit across multiple operating systems. It covers installation, basic concepts, widget management, and advanced topics in GUI design. The tutorial is designed for developers familiar with programming and focuses on modern best practices for building effective Tkinter applications.

Uploaded by

udohmogle
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 52

(Ebook) Modern Tkinter for Busy Python

Developers: Quickly learn to create great


looking user interfaces for Windows, Mac and
Linux using Python's standard GUI toolkit by
Mark Roseman ISBN 9781999149567, 1999149564
https://ebooknice.com/product/modern-tkinter-for-busy-python-
download
developers-quickly-learn-to-create-great-looking-user-interfaces-
for-windows-mac-and-linux-using-python-s-standard-gui-
toolkit-5388138

Explore and download more ebooks at ebooknice.com


We have selected some products that you may be interested in
Click the link to download now or visit ebooknice.com
for more options!.

(Ebook) Modern Tkinter for Busy Python Developers : Third


Edition by Unknown ISBN 9781999149581, 1999149580

https://ebooknice.com/product/modern-tkinter-for-busy-python-developers-
third-edition-37645540

(Ebook) Python GUI Programming Cookbook: Use recipes to develop


responsive and powerful GUIs using Tkinter, 2nd Edition by
Meier, Burkhard A. ISBN 9781787129450, 1787129454

https://ebooknice.com/product/python-gui-programming-cookbook-use-recipes-
to-develop-responsive-and-powerful-guis-using-tkinter-2nd-edition-29873630

(Ebook) Create GUI Applications with Python & Qt5: The hands-on
guide to making apps with Python by Martin Fitzpatrick

https://ebooknice.com/product/create-gui-applications-with-python-qt5-the-
hands-on-guide-to-making-apps-with-python-43766034

(Ebook) Python for Beginners: 2018 Edition: Learn to Code with


Python! by Mark Lassoff; Julius Hernandez ISBN 9781980820574,
1980820570

https://ebooknice.com/product/python-for-beginners-2018-edition-learn-to-
code-with-python-42932776
(Ebook) Create Gui Applications with Python & Qt5 by Martin
Fitzpack

https://ebooknice.com/product/create-gui-applications-with-python-
qt5-22683090

(Ebook) Create GUI Applications with Python & Qt6: The hands-on
guide to making apps with Python(pyside6 Edition) by Martin
Fitzpatrick

https://ebooknice.com/product/create-gui-applications-with-python-qt6-the-
hands-on-guide-to-making-apps-with-python-pyside6-edition-37263208

(Ebook) Create GUI Applications with Python & Qt5 - PySide2


Edition by Martin Fitzpatrick

https://ebooknice.com/product/create-gui-applications-with-python-
qt5-pyside2-edition-11547142

(Ebook) Python Unit Test Automation: Practical Techniques for


Python Developers and Testers by Ashwin Pajankar

https://ebooknice.com/product/python-unit-test-automation-practical-
techniques-for-python-developers-and-testers-50195020

(Ebook) Biota Grow 2C gather 2C cook by Loucas, Jason; Viles,


James ISBN 9781459699816, 9781743365571, 9781925268492,
1459699815, 1743365578, 1925268497

https://ebooknice.com/product/biota-grow-2c-gather-2c-cook-6661374
Modern Tkinter
for Busy Python Developers

Mark Roseman

1
Contents
Introduction..........................................................................................................................................7
Who this Tutorial is for....................................................................................................................7
Modern Best Practices.....................................................................................................................7
Tk Extensions..............................................................................................................................8
The Better Way Forward..................................................................................................................8
How to Use......................................................................................................................................9
Conventions................................................................................................................................9
Installing Tk........................................................................................................................................10
Installing Tk on Mac OS X............................................................................................................10
Install ActiveTcl........................................................................................................................10
Install Python............................................................................................................................10
Installing Tk on Windows..............................................................................................................11
Installing Tk on Linux...................................................................................................................12
Option 1. Your Linux Distribution's Package Manager............................................................12
Option 2. Install ActivePython..................................................................................................12
Option 3. Install Tcl/Tk and Compile the Standard Python Distribution..................................13
Verifying your Install................................................................................................................13
The Obligatory First Program........................................................................................................14
A First (Real) Example.......................................................................................................................14
Design............................................................................................................................................14
Code...............................................................................................................................................15
A Note on Coding Style............................................................................................................16
Step-by-Step Walkthrough.............................................................................................................17
What's Missing...............................................................................................................................19
Tk Concepts........................................................................................................................................19
Widgets..........................................................................................................................................19
Widget Classes..........................................................................................................................20
Window Hierarchy....................................................................................................................20
Creating and Using Widgets......................................................................................................21
Configuration Options...............................................................................................................21
Geometry Management..................................................................................................................22
The Problem..............................................................................................................................23
How it Works............................................................................................................................23
Event Handling..............................................................................................................................24
Command Callbacks.................................................................................................................24
Event Bindings..........................................................................................................................25
Virtual Events.......................................................................................................................25
Multiple Bindings.................................................................................................................26
Basic Widgets.....................................................................................................................................26
Frame.............................................................................................................................................26
Requested Size.....................................................................................................................27
Padding.................................................................................................................................27
Borders.................................................................................................................................27
Changing Styles....................................................................................................................28
Label..............................................................................................................................................28
Displaying Text....................................................................................................................29
Displaying Images................................................................................................................29
Layout...................................................................................................................................29

2
Fonts, Colors and More........................................................................................................30
Button.............................................................................................................................................31
Text or Image........................................................................................................................31
The Command Callback.......................................................................................................32
Button State..........................................................................................................................32
Checkbutton...................................................................................................................................33
Widget Value........................................................................................................................33
Radiobutton....................................................................................................................................34
Entry...............................................................................................................................................34
Passwords.............................................................................................................................35
Widget States........................................................................................................................35
Validation..............................................................................................................................36
Combobox......................................................................................................................................36
Predefined Values.................................................................................................................37
The Grid Geometry Manager.............................................................................................................37
Columns and Rows........................................................................................................................38
Spanning Multiple Cells................................................................................................................38
Layout within the Cell...................................................................................................................39
Handling Resize.............................................................................................................................40
Padding..........................................................................................................................................40
Additional Grid Features...............................................................................................................42
Querying and Changing Grid Options......................................................................................42
Internal Padding........................................................................................................................43
Forget and Remove...................................................................................................................43
Nested Layouts..........................................................................................................................44
More Widgets.....................................................................................................................................44
Listbox...........................................................................................................................................44
Populating the Listbox Items....................................................................................................45
Selecting Items..........................................................................................................................46
Stylizing the List.......................................................................................................................46
Keeping Extra Item Data...........................................................................................................46
Example....................................................................................................................................47
Scrollbar.........................................................................................................................................49
Example....................................................................................................................................51
SizeGrip.........................................................................................................................................51
Text................................................................................................................................................52
Contents....................................................................................................................................53
Progressbar.....................................................................................................................................53
Determinate Progess.................................................................................................................54
Indeterminate Progress..............................................................................................................54
Scale...............................................................................................................................................55
Spinbox..........................................................................................................................................56
Menus.................................................................................................................................................57
Menubars.......................................................................................................................................58
Menu Widgets and Hierarchy....................................................................................................58
Before you Start........................................................................................................................59
Creating a Menubar...................................................................................................................59
Adding Menus...........................................................................................................................60
Adding Menu Items..................................................................................................................60
Types of Menu Items.................................................................................................................60

3
Accelerator Keys.......................................................................................................................61
More on Item Options...............................................................................................................62
Underline..............................................................................................................................62
Images..................................................................................................................................62
State......................................................................................................................................62
Querying and Changing Item Options..................................................................................62
Platform Menus..............................................................................................................................63
Mac OS X..................................................................................................................................63
The Application Menu..........................................................................................................63
Handling the Preferences Menu Item...................................................................................64
Providing a Help Menu........................................................................................................64
Providing a Window Menu...................................................................................................65
Other Menu Handlers...........................................................................................................65
Windows....................................................................................................................................66
X11............................................................................................................................................66
Contextual Menus..........................................................................................................................67
Windows and Dialogs.........................................................................................................................67
Creating and Destroying Windows................................................................................................68
Changing Window Behavior and Styles........................................................................................68
Window Title........................................................................................................................68
Size and Location.................................................................................................................68
Stacking Order......................................................................................................................69
Resizing Behavior................................................................................................................70
Iconifying and Withdrawing.................................................................................................70
Standard Dialogs............................................................................................................................70
Selecting Files and Directories.............................................................................................70
Selecting Colors...................................................................................................................72
Alert and Confirmation Dialogs...........................................................................................73
Organizing Complex Interfaces..........................................................................................................74
Multiple windows.................................................................................................................74
White space..........................................................................................................................74
Separator........................................................................................................................................75
Label Frames..................................................................................................................................75
Paned Windows..............................................................................................................................76
Notebook........................................................................................................................................77
Fonts, Colors, Images.........................................................................................................................78
Fonts...............................................................................................................................................78
Standard Fonts...........................................................................................................................79
Platform-Specific Fonts............................................................................................................79
Named Fonts.............................................................................................................................80
Font Descriptions......................................................................................................................80
Colors.............................................................................................................................................81
Images............................................................................................................................................81
Problems with PIL/Pillow on Mac OS X?................................................................................82
Canvas................................................................................................................................................82
Creating Items................................................................................................................................83
Item Attributes...............................................................................................................................84
Bindings.........................................................................................................................................85
Tags................................................................................................................................................85
Modifying Items............................................................................................................................87

4
Scrolling.........................................................................................................................................87
Other Item Types............................................................................................................................89
Text.....................................................................................................................................................90
The Basics......................................................................................................................................90
Providing Initial Content...........................................................................................................91
Scrolling....................................................................................................................................91
Controlling Wrapping................................................................................................................91
Disabling the Widget.................................................................................................................91
Retrieving the Text....................................................................................................................91
Modifying the Text in Code...........................................................................................................92
Text Positions and Indices.........................................................................................................92
Deleting Text.............................................................................................................................93
Example: Logging Window......................................................................................................93
Formatting with Tags.....................................................................................................................94
Adding Tags to Text..................................................................................................................94
Applying Formatting to Tags....................................................................................................94
More Tag Manipulations...........................................................................................................95
Differences between Tags in Canvas and Text Widgets............................................................95
Events and Bindings......................................................................................................................96
Selecting Text.................................................................................................................................96
Marks.............................................................................................................................................96
Images and Widgets.......................................................................................................................97
Even More......................................................................................................................................98
Search........................................................................................................................................98
Modifications, Undo and Redo.................................................................................................98
Eliding Text...............................................................................................................................98
Introspection..............................................................................................................................98
Peering......................................................................................................................................98
Tree.....................................................................................................................................................99
Adding Items to the Tree...............................................................................................................99
Rearranging Items........................................................................................................................100
Displaying Information for each Item.........................................................................................100
Item Appearance and Events........................................................................................................101
Customizing the Display..............................................................................................................102
Styles and Themes............................................................................................................................102
Definitions...................................................................................................................................102
Widget Class...........................................................................................................................102
Widget State............................................................................................................................103
Style........................................................................................................................................104
Themes....................................................................................................................................104
Using Styles and Themes.............................................................................................................104
Style Names............................................................................................................................104
Using a Style...........................................................................................................................105
Using Themes..........................................................................................................................105
What's Inside a Style?..................................................................................................................106
Elements..................................................................................................................................106
Layout.....................................................................................................................................107
Element Options......................................................................................................................108
Changing Style Options...............................................................................................................108
Modifying a Style Option.......................................................................................................108

5
Creating a New, Derived Style................................................................................................109
State Specific Style Options....................................................................................................109
Sound Difficult to you?................................................................................................................110
Advanced: More on Elements......................................................................................................112
Case Study: IDLE Modernization....................................................................................................113
Project Goals................................................................................................................................115
Menus...........................................................................................................................................116
Main Window...............................................................................................................................117
Default Font.............................................................................................................................118
Around the Text Widget..........................................................................................................120
Preferences Dialog.......................................................................................................................122
Tabs.........................................................................................................................................125
Updating Widgets....................................................................................................................126
Layout.....................................................................................................................................126
Another Example....................................................................................................................128
Other Dialogs...............................................................................................................................130
Find Dialog.............................................................................................................................130
About Dialog...........................................................................................................................133
Online Help.............................................................................................................................136
Query Dialogs.........................................................................................................................137
Dialog Placement....................................................................................................................139
Window Integration.....................................................................................................................140
Tabbed Editor..........................................................................................................................141
Debugger.................................................................................................................................142
Integrated Shell and Debugger................................................................................................144
Workarounds, Hacks, and More...................................................................................................144
Tool Tips..................................................................................................................................144
Context Menus........................................................................................................................144
Peer Text Widgets....................................................................................................................144
Modal Windows......................................................................................................................144

6
Introduction
This tutorial is designed to help people get up to speed quickly with building mainstream desktop
graphical user interfaces with Tk, and in particular Tk 8.5, which is an incredibly significant
milestone release and a significant departure from the older versions of Tk which most people know
and love recognize.
The downside is that unless you know one or two particular things, it's actually not that significant a
release; For backwards compatibility reasons, unless existing programs make a few simple changes,
they won't look all that much different. So while this tutorial will certainly benefit newcomers to
Tk, it will also help existing Tk developers bring their knowledge right up to date. It's a cliche, but I
can't believe how much I've learned in writing this tutorial, and I've been using Tk for over fifteen
years.
The general state of Tk documentation (outside the Tcl-oriented reference documentation, which is
excellent) is unfortunately not at a high point these days. This is particularly true for developers
using Tk from languages other than Tcl, and developers working on multiple platforms.
So this tutorial will, as much as possible, target developers on the three main platforms (Windows,
Mac, Linux), and also be language-neutral. Initially, the tutorial will cover Tcl, Ruby, Perl and
Python. Over time, additional languages may be added. Even if your own language isn't included,
the chances are you'll still benefit; since all the languages use the same underlying Tk library, there's
obviously a lot of overlap.
This is also not a reference guide, it's not going to cover everything, just the essentials you need in
95% of applications. The rest you can find in reference documentation.

Who this Tutorial is for


This tutorial is designed for developers building tools and applications in Tk. It's also concerned
with fairly mainstream graphical user interfaces, with buttons, lists, checkboxes, rich text editing,
2D graphics and so on. So if you're either looking to hack on Tk's internal C code, or build the next
great 3D immersive game interface, this is probably not the material for you.
This tutorial also doesn't teach you the underlying programming language (Tcl, Ruby, Perl, Python,
etc.), so you should have a basic grasp on that already. Similarly, you should have a basic
familiarity with desktop applications in general, and while you don't have to be a user interface
designer, some appreciation of GUI design is always helpful.

Modern Best Practices


This tutorial is all about building modern Tk user interfaces using the current tools Tk has to offer.
It's all about the best practices you need to know to do this.

7
For most tools, you wouldn't think you'd have to say something like that, but for Tk that's not the
case. Tk has had a very long evolution (see Tk Backgrounder), and any evolution tends to leave you
with a bit of cruft; couple that with how much graphical user interface platforms and standards have
evolved in that time, and you can see where keeping something as large and complex as a GUI
library up to date as well as backwards compatible may be challenging.
Tk has, in recent years, gotten a bad rap, to put it mildly. Some of this has been well deserved, most
of it not so much. Like any GUI tool, it can be used to create absolutely terrible looking and
outdated user interfaces, but with the proper care and attention, it can also be used to create
spectacularly good ones as well. Most people know about the crappy ones; most of the good ones
people don't even know are done in Tk. In this tutorial, we're going to focus on what you need to
build good user interfaces, which isn't nearly as hard as it used to be before Tk 8.5.
So modern desktop graphical user interfaces, using modern conventions and design sense, using the
modern tools provided by Tk 8.5.

Tk Extensions
When it comes to modern best practices, Tk extensions deserve a special word of note. Over the
years, a number of groups have provided all kinds of add-ons to Tk, for example adding new
widgets not available in the core (or at least not at the time). Some well-known and quite popular
Tk extensions include BLT, Tix, iWidgets, BWidgets; there are many, many others.
Many of these extensions were created years ago. Because core Tk has always been highly
backwards compatible, these extensions generally continue to work with newer versions. However,
many have not been updated, or not been significantly updated, in a long time. They may not reflect
current platform conventions or styles, and so while they "work", they can make your application
appear extremely dated or out of place.
If you do decide to use Tk extensions, it's highly recommended that you investigate and review your
choices carefully.

The Better Way Forward


Tk also gives you a lot of choices. There are at least six different ways to layout widgets on the
screen, often multiple different widgets that could accomplish the same thing, especially if you
count the huge assortment of Tk extensions like Tix, BLT, BWidgets, Itk and others. Most of these
also are older, most not updated and therefore crappy looking, and in many cases, the facilities they
provide have been obsoleted by newer and more modern facilities recently built into Tk itself. But
for backwards compatibility reasons, most of these old ways of doing things still keep working,
year after year. That doesn't necessarily mean people should still be using some of them.
So there are a lot of choices in Tk, but frankly, all that choice gets in the way. If you want to learn
and use Tk, you don't need all the choices, you need the right choice, so you don't have to do all the
research and make that choice yourself. That's what this tutorial will give you. Think of it as the

8
documentation equivalent of opinionated software. So we'll often use different ways of doing things
than in other documentation or examples; often, it's because when those were written, the better
ways didn't even exist yet. Later on, once you're an expert, and you're encountering some wacky
situation where the normal choice doesn't fit, you can go hunt around for alternatives.

How to Use
While the tutorial is designed to be used linearly, feel free to jump around as you see fit. We'll often
provide links where you can go for more information, whether links to other documentation on this
site, such as our "widget roundup" providing usage info on each Tk widget, or to external
documentation, such as the full reference for a particular command.
The tutorial also lets you select what language (Tcl, Ruby, Perl or Python) to show. You can change
this by the "Show:" popup menu which is located in the sidebar, near the top right of each page in
the tutorial. But it also lets you see how Tk is used by all the different languages, which can itself be
quite interesting and useful.

Conventions
As is typically done, code listings, interpreter or shell commands and responses will be indicated
with a fixed-width font. When showing an interactive session with the interpreter, the parts
that you enter will additionally be in bold fixed-width.

When describing procedure or method calls, the literal parts (e.g. the method name) will be in plain
fixed-width font, parameters where you should fill in the actual value will add italics, and optional
parameters will be surrounded by '?', e.g. "set variable ?value?".

A number of icons appearing to the left of text are used, as follows:


This paragraph consists of material that is specific to the Python binding to Tk.
This paragraph will help point out common mistakes that people make, or suggest useful but not
necessarily obvious solutions related to the topic.
This indicates a new way of doing things in Tk 8.5 that is very different from the way things would
have been done previously. People familiar with older versions of Tk, or working on programs
developed with older versions of Tk, should pay close attention.
This paragraph provides some additional background information, not strictly necessary to
understanding the topic at hand, but that might help you understand a bit more about how or why
things are done the way they are.
This indicates some error in the tutorial itself which hasn't yet been corrected, or a section that has
been deleted but not yet replaced.
This indicates an area in Tk that could most charitably be described as a "rough edge". It may
indicate a bad or missing API requiring you to use a workaround in your code. Because these things

9
tend to get fixed up over time, it's worth marking them in your code with a "TODO" so you can
remember to go back later and see if a newer API resolves the problem cleanly.

Installing Tk
In this chapter, you'll get Tk installed on your machine, verify it works, and then see a quick
example of what a Tk program looks like.
Though pretty much all Mac OS X and Linux machines come with Tk installed already, it's often an
older version (typically 8.4.x). You want to make sure you've got at least version 8.5 (or possibly
8.6) to use the new widget set, so if that's not already there, you'll want to install the newer version.
Though there are lots of ways to install Tk, the easiest is to download and install one of the versions
provided by ActiveState (www.activestate.com).
ActiveState is a company that sells professional developer tools for dynamic languages. They also
provide (for free) quality-controlled distributions of some of these languages, and happen to employ
a number of core developers of these languages.

Installing Tk on Mac OS X
Tkinter (and, since Python 3.1, ttk) are included with all standard Python distributions on Mac OS
X. However, more recent distributions do not always include the underlying Tcl and Tk libraries
and support files, which must be installed separately.
While there are several different ways to do get Tcl and Tk onto your machine, the easiest and most
recommended is to use the ActiveTcl distribution.
If you're a masochist and want to read about other Tcl/Tk options and variations and how they
interact with Python, see the Mac Tcl/Tk page at python.org.

Install ActiveTcl
In your web browser, go to www.activestate.com, and follow along the links to download the
Community Edition of ActiveTcl, available as a universal binary. Make sure you're downloading an
8.5.x version, not an older 8.4.x version.
Run the installer to get Tcl and Tk loaded onto your machine.

Install Python
It is important that you use a version of Python supporting Tk 8.5 or greater, and ttk. We
recommend using the standard Python 3.x Mac installer that can be downloaded from python.org.
Earlier versions of this tutorial recommended using ActiveState's ActivePython. Older versions used
to include Tcl/Tk libraries and support files, but more recent versions no longer do, and require

10
downloading them separately, e.g. via ActiveTcl. Therefore the standard Python distribution works
just as well, and the end result is the same.
Run the installer and follow along. You'll end up with a fresh install of ActivePython in
/Library/Frameworks, along with links to the versioned Python binaries placed in /usr/local/bin (e.g.
'python3.4' if you downloaded ActivePython 3.4.x). From a Terminal window you should then be
able to run a Python shell:
% /usr/local/bin/python3.4

This should give you the Python command prompt. From the prompt, enter these two commands:
>>> import tkinter
>>> tkinter._test()

This should pop up a small window; the first line at the top of the window should say "This is
Tcl/Tk version 8.5"; make sure it is not 8.4!
You can also get the exact version of Tcl/Tk that is being used with:
>>> tkinter.Tcl().eval('info patchlevel')

which should return something like '8.5.18'.


Verified install using ActiveTcl 8.5.18.0 and Python 3.4.3 from python.org on Mac OS X 10.10.3.

Installing Tk on Windows
Tkinter (and, since Python 3.1, ttk) are included with all standard Python distributions. It is
important that you use a version of Python supporting Tk 8.5 or greater, and ttk. We recommend
using the standard Python 3.x Windows installer which can be downloaded from python.org.
Earlier versions of this tutorial recommended using the ActivePython distribution from ActiveState;
that will work as well. Both contain Python as well as the underlying Tcl/Tk libraries.
Run the installer, and follow along. You'll end up with a fresh install of ActivePython, located in,
e.g. C:\python34. From a Windows command prompt, or the Start Menu's "Run..." command, you
should then be able to run a Python shell via:
% C:\python34\python

This should give you the Python command prompt. From the prompt, enter these two commands:
>>> import tkinter
>>> tkinter._test()

This should pop up a small window; the first line at the top of the window should say "This is
Tcl/Tk version 8.5" (or "8.6"); make sure it is not 8.4!
You can also get the exact version of Tcl/Tk that is being used with:

11
>>> tkinter.Tcl().eval('info patchlevel')

which should return something like '8.5.18'.


Verified install using Python 3.4.3 from python.org (containing Tcl/Tk 8.6.1) on Windows 8.1.

Installing Tk on Linux
Tkinter (and, since Python 3.1, ttk) are included with all standard Python distributions. It is
important that you use a version of Python supporting Tk 8.5 or greater, and ttk. Many Python
distributions will not automatically install the underlying Tcl and Tk libraries however.
You have several different options to get Python and Tkinter onto your machine.

Option 1. Your Linux Distribution's Package Manager


Currently supported Linux distributions will usually already include a recent version of Python 3.x
(or have a .deb, .rpm, etc. package available to install). If so, this is usually the easiest way to go.
However, after you're done, start up a Python shell (e.g. /usr/bin/python3.4) and verify the install
(see below). You may find that when you try to 'import tkinter' that you get an error that you need to
install another package. If so, follow the instructions, and try again.
For example, running Ubuntu 14.04 LTS, Python 3.4.0 is already included. However, you also need
to install a separate package, python3-tk, to use Tkinter, e.g.
% sudo apt-get install python3-tk

In this case, that package provides Tcl/Tk 8.6.1 libraries to be used with Python.

Option 2. Install ActivePython


The "ActivePython" distribution from ActiveState includes both Python and the necessary Tcl/Tk
libraries.
In your web browser, go to www.activestate.com, and follow along the links to download the
Community Edition of ActivePython for Linux. Make sure you're downloading a 3.1 or newer
version.
Unpack it, run the installer (sudo ./install.sh), and follow along. You'll end up with a fresh install of
ActivePython, located in e.g. /opt/ActivePython-3.4. From a Terminal window you should then be
able to run a Python shell via:
% /opt/ActivePython-3.4/bin/python3.4

See below to verify your install.

12
Option 3. Install Tcl/Tk and Compile the Standard Python Distribution
If you'd like to use the standard source distribution from python.org, you can certainly do that.
But to do so, you'll need to get the Tcl and Tk include files and libraries loaded on your machine
first. While there are again several ways to do that, the easiest is to download and install ActiveTcl.
In your web browser, go to www.activestate.com, and follow along the links to download the
Community Edition of ActiveTcl for Linux. Make sure you're downloading a 8.5 or newer version.
Unpack it, run the installer (./install.sh), and follow along. You'll end up with a fresh install of
ActiveTcl, located in e.g. /opt/ActiveTcl-8.5.
Next, download the current Python 3.x source distribution from python.org, and unpack it. On your
configure line, you'll need to tell it how to find the version of Tcl/Tk you installed. Then build as
usual:
% ./configure --with-tcltk-includes='-I/opt/ActiveTcl-8.5/include'
--with-tcltk-libs='/opt/ActiveTcl-8.5/lib/libtcl8.5.so /opt/ActiveTcl-
8.5/lib/libtk8.5.so'
% ./make
% ./make install

Make sure to verify your install (see below).


Didn't work? There may have been an error compiling Python's tkinter code. To check, from the
main Python source directory, try "touch Modules/_tkinter.c" (note the underscore) and then
"make" to recompile it. Watch closely for error messages.

The most common thing is that the way you specified the Tcl/Tk include and libraries needs to be
changed somehow. Or if you get messages that certain include files can't be found (e.g.
"X11/Xlib.h") you may need to install additional packages on your Linux distribution (e.g. "apt-get
install libx11-dev"). Once you get it to compile without errors, don't forget to "make install".

Verifying your Install


At the Python command prompt, enter these two commands:
>>> import tkinter
>>> tkinter._test()

This should pop up a small window; the first line at the top of the window should say "This is
Tcl/Tk version 8.5"; make sure it is not 8.4!
If it gives you an error when you try to 'import tkinter' (e.g. "If this fails your Python may not be
configured for Tk"), something hasn't been set up right. If you compiled Python yourself, see above
to check for compile errors.
You can also get the exact version of Tcl/Tk that is being used with:
>>> tkinter.Tcl().eval('info patchlevel')

13
which should return something like '8.5.18'.
Verified install using ActiveTcl 8.5.18, Python 3.4.3 from python.org on Ubuntu 14.04 LTS

The Obligatory First Program


To make sure that everything actually did work, let's try to run a "Hello World" program in Tk.
While for something this short you could just type it in directly to the interpreter, instead use your
favorite text editor to put it in a file.
from tkinter import *
from tkinter import ttk
root = Tk()
ttk.Button(root, text="Hello World").grid()
root.mainloop()

Save this to a file named 'hello.py'. From a command prompt, type:


% python hello.py

Couldn't find hello.py? You might be looking in the wrong directory. Try providing the full path to
hello.py.

Our First Program. Some work left to do before the IPO.

A First (Real) Example


With that out of the way, let's try a slightly more useful example, which will give you an initial feel
for what the code behind a Tk program looks like.

Design
The example we'll use is a simple GUI tool that will convert a number of feet to the equivalent
number of meters. If we were to sketch this out, it might look something like this:

14
A sketch of our feet to meters conversion program.
So it looks like we have a short text entry widget that will let us type in the number of feet, and a
'Calculate' button that will get the value out of that entry, perform the calculation, and then put the
resulting number of meters on the screen just below where the entry is. We've also got three static
labels ("feet", "is equivalent to", and "meters") which help our user figure out how to use the
interface.
In terms of layout, things seem to naturally divide into three columns and three rows:

The layout of our user interface, which follows a 3 x 3 grid.

Code
Now here is the Python code to create this program.
from tkinter import *
from tkinter import ttk

def calculate(*args):
try:
value = float(feet.get())
meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
except ValueError:
pass

root = Tk()
root.title("Feet to Meters")

15
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

feet = StringVar()
meters = StringVar()

feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)


feet_entry.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))


ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3,
sticky=W)

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)


ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

feet_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

And the resulting user interface:

Screenshot of our completed feet to meters user interface (on Mac OS X, Windows and Linux).

A Note on Coding Style


Each of the languages included in this tutorial has a variety of coding styles and conventions
available to choose from, which help determine conventions for variable and function naming,
procedural, functional or object-oriented styles, and so on.
Because the focus on this tutorial is Tk, this tutorial will keep things as simple as possible, generally
using a very direct coding style, rather than wrapping up most of our code in procedures, modules,
objects, classes and so on. As much as possible, you'll also see the same names for objects,
variables, etc. used across the languages for each example.

16
Step-by-Step Walkthrough
Let's take a closer look at that code, piece by piece. For now, all we're trying to do is get a basic
understanding of the types of things we need to do to create a user interface in Tk, and roughly what
those things look like. We'll go into details later.
from tkinter import *
from tkinter import ttk

These two lines tell Python that our program needs two modules. The first, "tkinter", is the
standard binding to Tk, which when loaded also causes the existing Tk library on your system to be
loaded. The second, "ttk", is Python's binding to the newer "themed widgets" that were added to
Tk in 8.5.
Notice that we've imported everything from the tkinter module, so that we can call tkinter functions
etc. without prefixing them, which is standard Tkinter practice. However, because we've imported
just "ttk" itself, that means we'll need to prefix anything inside that module. So for example
calling "Entry(...)" would invoke the function inside the tkinter module, while we'd need
"ttk.Entry(...)" to invoke the function inside ttk. As you'll see, several functions are
defined in both modules, and sometimes you will need both, depending on the context. Making the
ttk calls explicit facilitates this, and will be the style used in this tutorial.
One of the first things you'll find if you're migrating new code over, is that the name of the Tkinter
module is now lowercase, i.e. "tkinter", rather than "Tkinter". This was changed as of Python 3.0.
root = Tk()
root.title("Feet to Meters")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

Yes, the "calculate" function appeared before this. We'll describe it down below, but need to
include it near the start because we reference it in other parts of the program.
Next, the above lines set up the main window, giving it the title "Feet to Meters". Next, we create a
frame widget, which will hold all the content of our user interface, and place that in our main
window. The "columnconfigure"/"rowconfigure" bits just tell Tk that if the main
window is resized, the frame should expand to take up the extra space.
Strictly speaking, we could just put the other parts of our interface directly into the main root
window, without the intervening content frame. However, the main window isn't itself part of the
"themed" widgets, so its background color wouldn't match the themed widgets we will put inside it.
Using a "themed" frame widget to hold the content ensures that the background is correct.
feet = StringVar()
meters = StringVar()
feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))

17
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3,
sticky=W)

The preceding lines create the three main widgets in our program: the entry where we type the
number of feet in, a label where we put the resulting number of meters, and the calculate button that
we press to perform the calculation.
For each of the three widgets, we need to do two things: create the widget itself, and then place it
onscreen. All three widgets, which are 'children' of our content window are created as instances of
one of Tk's themed widget classes. At the same time as we create them, we give them certain
options, such as how wide the entry is, the text to put inside the Button, etc. The entry and label
each are assigned a mysterious "textvariable"; we'll see what that does shortly.

If the widgets are just created, they won't automatically show up on screen, because Tk doesn't
know how you want them to be placed relative to other widgets. That's what the "grid" part does.
Remembering the layout grid for our application, we place each widget in the appropriate column
(1, 2 or 3), and row (also 1, 2 or 3). The "sticky" option says how the widget would line up
within the grid cell, using compass directions. So "w" (west) means anchor the widget to the left
side of the cell, "we" (west-east) means anchor it to both the left and right sides, and so on.
ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

The above three lines do exactly the same thing for the three static text labels in our user interface;
create each one, and place it onscreen in the appropriate cell in the grid.
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
feet_entry.focus()
root.bind('<Return>', calculate)

The preceeding three lines help put some nice finishing touches on our user interface.
The first line walks through all of the widgets that are children of our content frame, and adds a
little bit of padding around each, so they aren't so scrunched together. We could have added these
options to each "grid" call when we first put the widgets onscreen, but this is a nice shortcut.

The second line tells Tk to put the focus on our entry widget. That way the cursor will start in that
field, so the user doesn't have to click in it before starting to type.
The third line tells Tk that if the user presses the Return key (Enter on Windows) anywhere within
the root window, that it should call our calculate routine, the same as if the user pressed the
Calculate button.
def calculate(*args):
try:
value = float(feet.get())
meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
except ValueError:
pass

18
Here we define our calculate procedure, which is called either when the user presses the Calculate
button, or hits the Return key. It performs the feet to meters calculation, taking the number of feet
from our entry widget, and placing the result in our label widget.
Say what? It doesn't look like we're doing anything with those widgets! Here's where the magic
"textvariable" options we specified when creating the widgets come into play. We specified
the global variable "feet" as the textvariable for the entry, which means that anytime the entry
changes, Tk will automatically update the global variable feet. Similarly, if we explicitly change the
value of a textvariable associated with a widget (as we're doing for "meters" which is attached to
our label), the widget will automatically be updated with the current contents of the variable. Slick.
root.mainloop()

This final line tells Tk to enter its event loop, which is needed to make everything run.

What's Missing
It's also worth examing what we didn't have to include in our Tk program to make it work. For
example:
• we didn't have to worry about redrawing the screen as things changed
• we didn't have to worry about parsing and dispatching events, hit detection, or handling
events on each widget
• we didn't have to provide a lot of options when we created widgets; the defaults seemed to
take care of most things, and so we only had to change things like the text the button
displayed
• we didn't have to write complex code to get and set the values of simple widgets; we just
attached them to variables
• we didn't have to worry about what happens when the user closes the window or resizes it
• we didn't need to write extra code to get this all to work cross-platform

Tk Concepts
With a first example behind you, you should have a basic idea of what a Tk program might look like
and the types of tasks it needs to accomplish. We'll step back and look at three broad concepts that
you need to know to understand Tk: widgets, geometry management, and event handling.

Widgets
Widgets are all the things that you see onscreen. In our example, we had a button, an entry, a few
labels, and a frame. Others are things like checkboxes, tree views, scrollbars, text areas, and so on.

19
Widgets are what are often referred to as "controls"; you'll also often see them referred to as
"windows", particularly in Tk's documentation, a holdover from its X11 roots (so under that
terminology, both a toplevel window and things like a button would be called windows).
Here is an example showing some of Tk's widgets, which we'll cover individually shortly.

Several Tk Widgets.

Widget Classes
Widgets are objects, instances of classes that represent buttons, frames, and so on. So the first thing
you'll need to do is identify the specific class of the widget you'd like to instantiate. This tutorial and
the widget roundup will help with that.

Window Hierarchy
The other thing you'll need to know is the parent of the widget instance you'd like to create. In Tk,
all widgets are part of a window hierarchy, with a single root at the top of the hierarchy. This
hierarchy can be arbitrarily deep; so you might have a button in a frame in another frame within the
root window. Even a new toplevel window is part of that same hierarchy, with it and all its contents
forming a subtree of the overall window hierarchy.
In our metric conversion example, we had a single frame that was created as a child of the root
window, and that frame had all the other controls as children. The root window was a container for
the frame, and was therefore the frame's parent. The complete hierarchy for the example looked like
this:

20
Random documents with unrelated
content Scribd suggests to you:
MOI. Or la femme est un être humain et social; elle a donc un droit
absolu à cette égalité sans laquelle, dans la société, elle ne serait
qu'une paria.

M. PROUDHON. C'est logique. Mais je n'en conclus pas moins que la


femme n'a pas plus de droit à l'égalité qu'à la liberté. Que quoique
de même espèce que l'homme, conséquemment devant relever de la
loi d'égalité, cependant elle n'en relève pas, et doit être inégale et
soumise à l'homme, parce qu'il est le plus fort.

MOI. Fi! mon Maître. Vous contredire de la sorte est honteux pour
votre réputation. Il aurait mieux valu soutenir que la femme n'a pas
les mêmes droits que l'homme, parce qu'elle est d'une autre espèce.

M. PROUDHON. La femme est tenue de sentir qu'elle n'a pas une


dignité égale à celle de l'homme; dans leur association formée pour
produire de la justice, les notions de droit et de devoir ne seront plus
corrélatives. L'homme aura tous les droits et n'acceptera de devoirs
que ceux qu'il voudra bien se reconnaître.

MOI. Songez-vous que l'homme, après avoir nié la dignité et le droit


de la femme, travaillera de plus en plus à l'abêtir dans l'intérêt de
son despotisme?

M. PROUDHON. Cela ne me regarde pas: la famille doit être murée:


le mari y est prêtre et roi. Si, comme toute liberté opprimée, la
femme regimbe, nous lui dirons quelle ne se connaît pas elle-même,
qu'elle est incapable de se juger et de se régir; qu'elle est un néant;
nous l'outragerons dans sa valeur morale, nous la nierons dans son
intelligence et son activité: et à force de l'intimider, nous
parviendrons à la faire taire: car mordieu! il faut que l'homme reste
le maître, puisqu'il est le plus fort!

MOI. Niez et outragez; cela ne nous fait rien, Maître: les seigneurs
usaient de cette méthode contre vos pères leurs serfs... aujourd'hui
on s'indigne contre eux. Les possesseurs d'esclaves usaient et usent
de cette méthode contre les noirs, et le monde civilisé s'indigne
contre eux, l'esclavage est restreint et tend à disparaître.
En attendant je signale à mes lecteurs vos contradictions: votre
autorité sur les esprits en sera, j'espère, amoindrie.
Ceux qui prétendront, d'après la majeure des syllogismes
précédents, que vous fondez le droit sur l'identité d'espèce,
abstraction faite des qualités individuelles; que vous croyez le droit
et le devoir corrélatifs, que vous voulez l'égalité, la liberté, auront
tout aussi raison que ceux qui prétendront, d'après la conclusion des
mêmes syllogismes, que vous basez le droit sur la force, la
supériorité des facultés; que vous acceptez l'inégalité, le despotisme,
niez la liberté individuelle et l'égalité sociale, et ne croyez point à la
corrélation du droit et du devoir.
S'il est triste pour vous d'être tombé dans des contradictions aussi
monstrueuses, croyez qu'il ne l'est pas moins pour moi, dans l'intérêt
de ma cause, de les signaler devant tous.
Prenant en main la cause de mon sexe, j'étais dans l'obligation de
riposter à vos attaques, en retournant contre vous toutes vos
allégations contre nous.
Il fallait le faire, non par des dénégations et des déclamations qui ne
prouvent rien, ou par des affirmations sans preuves selon votre
procédé; mais en vous opposant la science et les faits; en ne me
servant que de la méthode rationnelle que vous préconisez sans
vous en servir, en vous chargeant souvent de vous contredire quand
les preuves de fait eussent demandé trop de détail et de temps.
Vous accusiez les femmes de prendre des chimères pour des
réalités... Je vous ai prouvé que vous méritez ce reproche, puisque
votre théorie est en contradiction avec la science et les faits.
Vous accusiez les femmes d'ériger en principes de vaines analogies...
Je vous ai prouvé que vous en avez fait autant, en induisant de la
prétendue absence de germes physiques chez la femme, l'absence
de germes intellectuels et moraux.
Vous accusiez la femme de raisonner à contre sens.... je vous ai mis
en présence de vos propres principes, pour en tirer des
conséquences contradictoires.
Vous accusiez la femme de ne faire que des Macédoines, des
Monstres... L'anatomie de votre théorie prouve que vous en savez
faire tout autant.
Vous accusiez la femme d'inintelligence, de défaut de justice, de
vertu, de chasteté... J'en appelle à vous même, et vous dites
positivement le contraire.
Où vous êtes fantasque, contradictoire, j'en appelle moi, femme, à la
logique.
Où vous manquez de méthode, moi, femme, j'emploie la méthode
scientifique et rationnelle.
Où vous démentez vos propres principes, j'en appelle à ces mêmes
principes pour vous juger et vous condamner.
Lequel de nous deux, Monsieur, est le plus raisonnable et le plus
rationnel?
Ma modestie souffre, je vous l'avoue, de penser que j'ai joué le rôle
de Minerve faisant honte à Ulysse de ses paradoxes et de ses
roueries. Enfin, cet ennuyeux rôle est fini!
Je vous ai adressé tant de duretés, et d'un ton si ferme et si résolu,
que j'aurais regret de vous quitter sans vous dire quelques bonnes
paroles partant du fond de mon cœur. Vous devez être bien
convaincu de ma sincérité, car vous voyez que vous avez affaire à
une femme qui ne recule devant personne; qu'on n'intimide pas,
quelque grand qu'on soit et quelque nom qu'on porte. Vous pouvez
être mon adversaire: je ne serai jamais votre ennemie, car je vous
estime comme un honnête homme, un vigoureux penseur, une des
gloires de la France, une des illustrations de notre Comté, toujours si
chère au cœur de ses enfants, enfin comme une des admirations de
ma jeunesse. Vous et moi, M. Proudhon, nous appartenons à la
grande armée qui donne l'assaut à la citadelle des abus et y porte la
mine et la sape: je ne fuis pas cette solidarité. Est-il donc si
nécessaire que nous nous battions? Vivons en paix; je puis vous en
prier sans m'abaisser, puisque je ne vous crains pas. Comprenez une
chose que je vous dis sans fiel: c'est que vous êtes incapable de
comprendre la femme, et qu'en continuant la lutte, vous la rangerez
immanquablement sous la bannière de la Contre-Révolution.
Votre orgueil a mis inimitié entre vous et la femme, et vous lui avez
mordu le talon: personne ne serait plus affligé que moi de la voir
vous écraser la tête.
RÉSUMÉ.

Comparaissez tous, novateurs modernes, devant le public votre juge,


et venez vous résumer vous-mêmes.

LE COMMUNISTE. Les deux sexes diffèrent, ne remplissent pas les


mêmes fonctions; mais ils sont égaux devant la loi.
Pour que la femme soit réellement émancipée, il faut faire subir à la
société une refonte économique et supprimer le mariage.

LE PHILADELPHE ET L'ICARIEN. Nous sommes de votre avis, excepté en


ce qui touche le mariage, frère.

LE SAINT-SIMONIEN ORTHODOXE. Si le Christianisme a méprisé la


femme, s'il l'a opprimée, c'est, qu'à ses yeux, elle représentait la
matière, le monde, le mal. Nous qui venons donner le véritable sens
de la Trinité, nous réhabilitons ou expliquons ce que nos
prédécesseurs ont condamné. La femme est l'égale de l'homme,
parce qu'en Dieu, qui est tout, la matière est égale à l'esprit. Avec
l'homme, la femme forme le couple qui est l'individu social, le
fonctionnaire. Comme la femme est très différente de l'homme, nous
ne nous permettons pas de la juger; nous nous contentons de
l'appeler pour qu'elle se révèle. Cependant nous pensons qu'elle ne
peut s'affranchir qu'en s'émancipant dans l'amour.

PIERRE LEROUX, s'agitant. Prenez garde! Ce n'est pas en tant que


sexe que la femme doit être affranchie; ce n'est qu'en qualité
d'épouse et de personne humaine. Elle n'a de sexe que pour celui
qu'elle aime; pour tous les autres hommes elle est ce qu'ils sont eux-
mêmes: sensation—sentiment—connaissance. Il faut qu'elle soit libre
dans le mariage et la cité, comme le doit être l'homme lui-même.

LE FUSIONIEN, interrompant. Vous avez raison, Pierre Leroux; mais le


préopinant n'a pas tout à fait tort non plus; la femme est libre et
l'égale de l'homme en tout, parce que l'esprit et la matière sont
égaux en Dieu, parce que l'homme et la femme forment ensemble
l'androgyne humain, dérivation de l'androgyne divin. N'est-ce pas,
ma chère sœur?

MOI.Permettez-moi, mes frères, de ne point entrer dans vos débats


théologiques: je n'ai pas les ailes assez fortes pour vous suivre dans
le sein de Dieu, afin de m'assurer s'il est esprit et matière,
androgyne ou non, binaire, trinaire, quaternaire ou rien du tout de
cela. Il me suffit que vous conveniez tous que la femme doit être
libre et l'égale de l'homme.
Je ne me permettrai qu'une seule observation: c'est que votre notion
du couple ou de l'androgyne, au fond une seule et même chose,
tend fatalement à l'asservissement de mon sexe: quand, par une
métaphore, une fiction l'on fait de deux êtres doués chacun d'une
volonté, d'un libre arbitre et d'une intelligence à part, une seule
unité: dans la pratique sociale, cette unité se manifeste par une
seule intelligence, une seule volonté, un seul libre arbitre; et
l'individualité qui prévaut dans notre monde, est celle qui est douée
de la force du poignet: l'autre est annihilée, et le droit donné au
couple n'est en réalité que le droit du plus fort. L'usage que fait M.
Proudhon de l'androgynie devrait vous guérir de cette fantaisie-là;
comme l'usage que vos prédécesseurs ont fait du ternaire devrait
vous avoir garantis de la métaphysique trinitaire. Ceci soit dit sans
vous offenser, Messieurs, j'ai une antipathie prononcée pour les
trinités et les androgynies quelconques; je suis ennemie jurée de
toute métaphysique, qu'elle soit profane ou sacrée; c'est un vice de
constitution aggravé chez moi par Kant et son école.
UN PHALANSTÉRIEN. Pour Dieu! Messieurs, laissons là ce mysticisme.
L'homme et la femme diffèrent, mais ils sont aussi nécessaires l'un
que l'autre à la grande œuvre que doit accomplir l'humanité: donc ils
sont égaux. Comme chaque individu a droit de se développer
intégralement, de se manifester complétement pour remplir la tâche
parcellaire que lui attribuent ses attractions, l'on ne peut pas plus
mettre en question la liberté d'un sexe que de l'autre. L'homme
module en majeur, la femme en mineur, avec un huitième
d'exception; mais, comme dans toutes les fonctions générales, la
combinaison des deux modes est nécessaire, il est clair que chacune
d'elles doit être double, et que la femme doit être partout de moitié
avec l'homme.

M.DE GIRARDIN, avec un peu de brusquerie. Messieurs, je conviens


avec vous que la femme doit être libre et l'égale de l'homme;
seulement je soutiens que sa fonction est d'administrer, d'épargner,
d'élever ses enfants, tandis que l'homme travaille et apporte dans le
ménage le produit de ses labeurs.
Comme je veux que la femme soit délivrée du servage, et que je
veux rendre tous les enfants légitimes, je supprime le mariage civil
et j'institue le douaire universel.

M. LEGOUVÉ, souriant. Vous allez bien vite et bien loin mon cher
Monsieur; vous effarouchez tout le monde. Au fond du cœur, je crois
bien comme vous à l'égalité des sexes par l'équivalence des
fonctions, mais je me garde bien d'en souffler mot. Je me contente
de réclamer pour les femmes l'instruction, une diminution de servage
conjugal et des emplois de charité: comptant bien, entre nous, que,
ces conquêtes obtenues, les femmes seront en mesure, par leur
instruction et leur utilité constatée, de s'affranchir tout à fait. Eh
bien! malgré ma réserve et ma modération, vous verrez que les uns
me traiteront de femmelin, les autres de sans-culotte!

M. MICHELET, se levant les larmes aux yeux. Hélas! Messieurs, tous


vous faites fausse route; et j'ai grande douleur, mon cher
académicien Legouvé, de vous voir employer votre plume élégante à
mettre les femmes dans une voie aussi périlleuse et aussi
déraisonnable.
Quant à vous, Messieurs, qui réclamez pour la femme la liberté et
l'égalité de droits, vous n'y êtes point autorisés par elle; elle ne
demande aucun droit; qu'en ferait-elle, cet être faible, toujours
malade, toujours blessé! La Pauvre..... Quel peut être son rôle ici
bas, si ce n'est d'être adorée de son mari, qui doit se constituer son
instituteur, son médecin, son confesseur, sa garde malade, sa femme
de chambre; la tenir en serre chaude, et, avec tous ces soins si
multipliés, gagner encore le pain quotidien; car la femme ne peut, ni
ne doit travailler; elle est l'amour et l'autel du cœur de l'homme.
Quelques uns d'entre vous ont osé prononcer le vilain mot: Divorce.
Pas de Divorce! La femme qui s'est donnée, a reçu l'empreinte de
l'homme. Vous ne devez pas la quitter, quelque coupable qu'elle
puisse être. J'ai pensé d'abord qu'à votre mort elle devait prendre le
deuil jusqu'à la tombe, au delà de laquelle il y aura fusion d'elle et
de son mari dans l'unité de l'Amour. Mais je me suis ravisé: vous
pouvez vous nommer un successeur.
Tandis que M. Michelet se rassied en s'essuyant les yeux, on voit se
lever le couvercle d'un cercueil.

M. COMTE. Dignement et admirablement parlé! illustre professeur,


prononce une voix sépulcrale.
Comment! Vous, ici!... s'écrie l'assemblée. On ne meurt donc pas
tout entier comme vous l'enseigniez à vos disciples?

M. COMTE. Non, Messieurs; et j'ai été fort agréablement surpris de


voir que je m'étais trompé. Mais ce n'est pas pour vous instruire de
la vie d'outre tombe que je reviens; cela n'aurait pas valu la peine
d'un dérangement. C'est pour témoigner au grand professeur
Michelet toute la satisfaction que j'éprouve, à le voir si richement
poétiser l'idéal que je me suis fait de la femme, et jeter tant de
fleurs sur l'admirable maxime d'Aristote et le commandement du
grand saint Paul.
Oui, Maître trois fois illustre, vous avez bien dit: la femme est faite
pour l'homme, doit lui obéir, se dévouer; n'est qu'une dole dans la
vie privée, absolument rien dans la vie publique. Oui, l'homme doit
travailler pour elle; oui le mariage est indissoluble; tout cela est d'un
Auguste-Comtisme irréprochable. Je n'ai qu'un regret: c'est que vous
n'ayez pas conservé les oraisons jaculatoires de la femme à son mari
et de celui-ci à sa femme: il eut été d'un bon exemple et d'un bel
effet, de les voir chaque matin, agenouillés l'un en face de l'autre,
les mains jointes et les yeux fermés. J'espère que ce n'est qu'un
oubli, et que vous rétablirez ce détail dans la prochaine édition. Je
vous félicite hautement de l'heureuse idée que vous avez eue de
justifier l'absorption de la femme par l'homme, à l'aide d'une
blessure et des mystères de l'imprégnation: cela fera grand effet sur
les ignorants.
Les femmes révoltées, et les insensés au cœur corrompu qui les
soutiennent, diront que vous êtes un égoïste poétique et naïf; notre
cher Proudhon, un égoïste brutal; moi, un égoïste par A plus B.
Laissons les dire: je vous approuve et vous bénis.
L'apparition se disposait à se recoucher dans son cercueil; moi qui
coudoie volontiers les fantômes, je la tirai par un coin de son suaire
et, quoiqu'elle me fit un geste de Vade retro non équivoque, j'eus le
courage de représenter humblement au défunt Grand-Prêtre, que le
front de M. Proudhon méritait tout autant d'être béni que celui de M.
Michelet. Le défunt leva dignement l'index et le medium de sa dextre
décharnée sur la tête altière et peu vénérante du grand critique, qui
ne se courba point et ne parut pas infiniment flatté.
Comme c'était son tour de parler, M. Proudhon se leva et dit:
Messieurs les Communistes, les Philadelphes, les Fusioniens, les
Phalanstériens, les Saint-Simoniens, et vous, Messieurs de Girardin
et Legouvé ainsi que tous vos adhérents, vous êtes tous des
femmelins, et des gens hardis dans l'absurde.
Si mon ami Michelet vous a doré, parfumé et sucré la pilulle, je ne
puis avoir son adresse et sa modération, car vous savez que, par
tempérament, moi, P. J. Proudhon, je ne suis ni tendre, ni poète.
Permettez-moi donc de vous dire tout brutalement la vérité sur une
question où vous n'entendez pas le premier mot.
L'Église, saint Thomas d'Aquin, saint Bonaventure, saint Paul,
Auguste Comte, aussi bien que les Romains, les Grecs, Manou et
Mahomet, enseignent que la femme est faite pour le plaisir et l'utilité
de l'homme, et qu'elle lui doit être soumise; or j'ai suffisamment
établi ces grandes vérités par des affirmations sans réplique. Il est
donc aujourd'hui démontré pour quiconque croit en moi, que la
femme est un être passif, n'ayant germe de rien, qui doit tout à
l'homme, que, conséquemment, elle lui appartient comme l'œuvre à
l'ouvrier. Ma solution devant paraître un peu brutale, ou trop antique
ou moyen âge, j'ai pris aux novateurs modernes leur petite drôlerie
d'Androgynie; j'ai fait du Couple l'organe de la Justice: dans ce
couple la femme, transformée par l'homme, devient une triple
beauté, une idole domestique, soumise en tout à son prêtre. Je
l'enferme dans le ménage, et permets qu'elle ait l'intendance des
fêtes et spectacles, l'éducation des enfants et des jeunes filles, etc.
N'est-il pas évident, Messieurs, que la femme, parce qu'elle est plus
faible que nous, est, de par la justice, condamnée à nous obéir? Et
que sa liberté consiste à n'éprouver aucune émotion amoureuse,
même pour son mari? N'est-il pas évident, en conséquence, que
vous, qui ne pensez pas comme moi, êtes des femmelins, des gens
absurdes, et que les femmes qui ne veulent pas plus être esclaves
que nous autres ne consentions à l'être en 89, sont des insurgées,
des impures que le péché a rendues folles?
La majorité de l'assemblée rit; M. de Girardin hausse les épaules; M.
Legouvé se mord les lèvres pour ne pas sourire; M. Michelet paraît
inquiet de cette sortie qui peut tout gâter. Comme, en prononçant le
mot insurgée, l'orateur m'a regardée de travers avec une intention
très marquée, je ne puis m'empêcher de lui dire: Oui, je mérite le
nom d'insurgée comme nos pères de 89. Quant à vous, si vous ne
vous amendez, je crains bien de vous voir mourir dûment confessé
et extrême-onctionné... et vous l'aurez bien mérité!
Maintenant, dépouillons le vote de votre honorable assemblée,
Messieurs.
Quatre Écoles: les Communistes, les Saint-Simoniens, les Fusioniens,
les Phalanstériens et un publiciste, M. de Girardin, qui fait autant de
bruit à lui tout seul qu'une école, sont pour la liberté de la femme et
l'égalité des sexes.
MM. Comte, Proudhon, Michelet sont contre la liberté de la femme et
l'égalité des sexes.
M. Legouvé et ses innombrables adhérents veulent la liberté de la
femme, et désirent qu'elle travaille à devenir l'égale de l'homme par
l'équivalence des fonctions.
Ce qui veut dire que l'immense majorité de ceux qui pensent sont, à
différents degrés, pour notre Émancipation.
Maintenant que mes lecteurs sont au fait de vos opinions diverses,
Messieurs, à moi, femme, de parler, de moi-même pour mon droit,
sans m'appuyer sur autre chose que sur la Justice et la Raison.

FIN DU PREMIER VOLUME.


TABLE DU PREMIER VOLUME.
Pages

A mes lecteurs, à mes adversaires, à mes amis.

A mes lecteurs 5
A mes adversaires 9
A mes amis 11

PREMIÈRE PARTIE.

Communistes modernes 17
Saint-Simoniens 24
Fusioniens 37
Phalanstériens 44
M. Ernest Legouvé 56
M. É. de Girardin 78
M. Michelet 91
M. A. Comte 110
M. Proudhon 126
Résumé 221
ERRATA.
Page 10, ligne 1, au lieu de: ne sachant pas écrire, lisez: ne sachant
pas même écrire.
Page 21, ligne 27, au lieu de: brave Jeanne Durain, lisez: brave
Jeanne Deroin.
Page 101, ligne 3, au lieu de: une borne pierre, lisez: une bonne
pierre.
Page 106, ligne 18, au lieu de: aient appartenu, lisez: n'aient
appartenu.
Page 107, ligne 27, au lieu de: devaient être, lisez: doivent être.
Page 124, ligne 26, au lieu de: que'éducation, lisez: qu'éducation.
Page 142, ligne 12, au lieu de: de régir, lisez: de se régir.
Page 163, ligne 5, au lieu de: je le tiendra, lisez: je le tiendrai.
Page 194, ligne 6, au lieu de: ne sont que de, lisez: ne sont que des.
Page 207, ligne 28, au lieu de: ubstance, lisez: substance.
*** END OF THE PROJECT GUTENBERG EBOOK LA FEMME
AFFRANCHIE, VOL. 1 OF 2 ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for


the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.

1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.

1.F.5. Some states do not allow disclaimers of certain implied


warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.

1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation,


the trademark owner, any agent or employee of the Foundation,
anyone providing copies of Project Gutenberg™ electronic works in
accordance with this agreement, and any volunteers associated with
the production, promotion and distribution of Project Gutenberg™
electronic works, harmless from all liability, costs and expenses,
including legal fees, that arise directly or indirectly from any of the
following which you do or cause to occur: (a) distribution of this or
any Project Gutenberg™ work, (b) alteration, modification, or
additions or deletions to any Project Gutenberg™ work, and (c) any
Defect you cause.

Section 2. Information about the Mission


of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.

Volunteers and financial support to provide volunteers with the


assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.

Section 3. Information about the Project


Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.

The Foundation’s business office is located at 809 North 1500 West,


Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact

Section 4. Information about Donations to


the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many
small donations ($1 to $5,000) are particularly important to
maintaining tax exempt status with the IRS.

The Foundation is committed to complying with the laws regulating


charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states where


we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot make


any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.

Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.

Section 5. General Information About


Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.
Project Gutenberg™ eBooks are often created from several printed
editions, all of which are confirmed as not protected by copyright in
the U.S. unless a copyright notice is included. Thus, we do not
necessarily keep eBooks in compliance with any particular paper
edition.

Most people start at our website which has the main PG search
facility: www.gutenberg.org.

This website includes information about Project Gutenberg™,


including how to make donations to the Project Gutenberg Literary
Archive Foundation, how to help produce our new eBooks, and how
to subscribe to our email newsletter to hear about new eBooks.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like