Tkinter

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Tkinter
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    LicensePython license

    Tkinter is a binding to the Tk GUI toolkit for Python. It is the standard Python interface to the Tk GUI toolkit,[1] and is Python's de facto standard GUI.[2] Tkinter is included with standard Linux, Microsoft Windows and macOS installs of Python.

    The name Tkinter comes from Tk interface. Tkinter was written by Steen Lumholt and Guido van Rossum,[3] then later revised by Fredrik Lundh.[4]

    Tkinter is free software released under a Python license.[5]

    Description

    [edit | edit source]

    As with most other modern Tk bindings, Tkinter is implemented as a Python wrapper around a complete Tcl interpreter embedded in the Python interpreter. Tkinter calls are translated into Tcl commands, which are fed to this embedded interpreter, thus making it possible to mix Python and Tcl in a single application.

    There are several popular GUI library alternatives available, such as Kivy, Pygame, Pyglet, PyGObject, PyQt, PySide, and wxPython.

    Definitions

    [edit | edit source]

    This term has different meanings in different contexts, but in general it refers to a rectangular area somewhere on the user's display screen.

    Top-level window

    [edit | edit source]

    A window which acts as a child of the primary window. It will be decorated with the standard frame and controls for the desktop manager. It can be moved around the desktop and can usually be resized.

    Widget

    [edit | edit source]

    The generic term for any of the building blocks that make up an application in a graphical user interface.

    • Core widgets:
      • Containers:
        • frame
        • labelframe
        • toplevel
        • paned window.
      • Buttons:
        • button
        • radiobutton
        • checkbutton (checkbox)
        • menubutton.
      • Text widgets:
        • label,
        • message
        • text
      • Entry widgets:
        • scale
        • scrollbar
        • listbox
        • slider
        • spinbox
        • entry (singleline)
        • optionmenu
        • text (multiline)
      • Canvas (vector and pixel graphics)

    Tkinter provides three modules that allow pop-up dialogs to be displayed: tk.messagebox (confirmation, information, warning and error dialogs), tk.filedialog (single file, multiple file and directory selection dialogs) and tk.colorchooser (colour picker).

    Python 2.7 and Python 3.1 incorporate the "themed Tk" ("ttk") functionality of Tk 8.5.[6][7] This allows Tk widgets to be easily themed to look like the native desktop environment in which the application is running, thereby addressing a long-standing criticism of Tk (and hence of Tkinter). Some widgets are exclusive to ttk, such as the combobox, progressbar, treeview, notebook, separator and sizegrip.[8]

    Frame

    [edit | edit source]

    In Tkinter, the Frame widget is the basic unit of organization for complex layouts. A frame is a rectangular area that can contain other widgets.

    Child and parent

    [edit | edit source]

    When any widget is created, a parent–child relationship is created. For example, if you place a text label inside a frame, the frame is the parent of the label.

    Minimal application

    [edit | edit source]

    Below is a minimal Python 3 Tkinter application with one widget:[9]

    #!/usr/bin/env python3
    from tkinter import *
    root = Tk() 							# Create the root (base) window 
    w = Label(root, text="Hello, world!") 	# Create a label with words
    w.pack() 								# Put the label into the window
    root.mainloop() 						# Start the event loop
    

    For Python 2, the only difference is the word "tkinter" in the import command will be capitalized to "Tkinter".[10]

    Process

    [edit | edit source]

    There are four stages to creating a widget[11]

    Create
    Create it within a frame
    Configure
    Change the widget's attributes.
    Pack
    Pack it into position so it becomes visible. Developers also have the option to use .grid() (row=int, column=int to define rows and columns to position the widget, defaults to 0) and .place() (relx=int or decimal, rely=int or decimal, define coordinates in the frame, or window).
    Bind
    Bind it to a function or event.

    These are often compressed, and the order can vary.

    Simple application

    [edit | edit source]

    Using the object-oriented paradigm in Python, a simple program would be (requires Tcl version 8.6, which is not used by Python on MacOS by default):

    #!/usr/bin/env python3
    import tkinter as tk
    
    
    class Application(tk.Frame):
        def __init__(self, root=None):
            tk.Frame.__init__(self, root)
            self.grid()
            self.createWidgets()
    
        def createWidgets(self):
            self.medialLabel = tk.Label(self, text="Hello World")
            self.medialLabel.config(bg="#00ffff")
            self.medialLabel.grid()
            self.quitButton = tk.Button(self, text="Quit", command=self.quit)
            self.quitButton.grid()
    
    
    app = Application()
    app.root = tk.Tk()
    app.root.title("Sample application")
    app.mainloop()
    
    • line 1: Hashbang directive to the program launcher, allowing the selection of an appropriate interpreter executable, when self-executing.[12]
    • line 2: Imports the tkinter module into your program's namespace, but renames it as tk.
    • line 5: The application class inherits from Tkinter's Frame class.
    • line 7: Defines the function that sets up the Frame.
    • line 8: Calls the constructor for the parent class, Frame.
    • line 12: Defining the widgets.
    • line 13: Creates a label, named MedialLabel with the text "Hello World".
    • line 14: Sets the MedialLabel background colour to cyan.
    • line 15: Places the label on the application so it is visible using the grid geometry manager method.
    • line 16: Creates a button labeled “Quit”.
    • line 17: Places the button on the application. Grid, place and pack are all methods of making the widget visible.
    • line 20: The main program starts here by instantiating the Application class.
    • line 21: Creates main window app.root as a Tk object.
    • line 22: This method call sets the title of the window to “Sample application”.
    • line 23: Starts the application's main loop, waiting for mouse and keyboard events.

    See also

    [edit | edit source]
    • IDLE — integrated development environment in Python, written exclusively using Tkinter

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Tkinter GUI Tutorial, covers each widget individually.
    • TkDocs: includes language-neutral and Python-specific information and a tutorial
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).