DEV Community

moogoo
moogoo

Posted on • Updated on

Tkinter & Tk resources

Documentation

Default Widgets

Canvas

no border

highlightthickness=0, relief='ridge', bd=0
Enter fullscreen mode Exit fullscreen mode

Image

foo = PhotoImage # foo may clear by garbage collection, can assign to class to prevent
button.image = foo
Enter fullscreen mode Exit fullscreen mode

Quick references

Widgets useful methods

The following are some of the most useful methods: 

- winfo_class: a class identifying the type of widget, e.g. TButton for a themed button
- winfo_children: a list of widgets that are the direct children of a widget in the hierarchy
- winfo_parent: parent of the widget in the hierarchy
- winfo_toplevel: the toplevel window containing this widget 
- winfo_width, winfo_height: current width and height of the widget; not accurate until appears onscreen 
- winfo_reqwidth, winfo_reqheight: the width and height the widget requests of the geometry manager (more on this shortly) 
- winfo_x, winfo_y: the position of the top-left corner of the widget relative to its parent 
- winfo_rootx, winfo_rooty: the position of the top-left corner of the widget relative to the entire screen the position of the top-left corner of the widget relative to its parent 
- winfo_rootx, winfo_rooty: the position of the top-left corner of the widget relative to the entire screen 
- winfo_vieweable: whether the widget is displayed or hidden (all its ancestors in the hierarchy must be viewable for it to be viewable)
Enter fullscreen mode Exit fullscreen mode

screen size

screen_width = win.winfo_screenwidth()
screen_height = win.winfo_screenheight()
#Print the screen size
print("Screen width:", screen_width)
print("Screen height:", screen_height)
Enter fullscreen mode Exit fullscreen mode
def print_hierarchy(w, depth=0):
    print('  '*depth + w.winfo_class() + ' w=' + str(w.winfo_width()) + ' h=' + str(w.winfo_height()) + ' x=' + str(w.winfo_x()) + ' y=' + str(w.winfo_y()))
    for i in w.winfo_children():
        print_hierarchy(i, depth+1)
print_hierarchy(root)
Enter fullscreen mode Exit fullscreen mode

Grid management

grid_forget & grid_remove

grid_slaves()
w.grid_remove()
destroy()
grid_forget
w.grid()

# destroy
for widget in frame.winfo_children():
    widget.destroy()
Enter fullscreen mode Exit fullscreen mode

life circle ?

update(), update_idletastks()

python - What's the difference between "update" and "update_idletasks"? - Stack Overflow

The important thing to remember is that update blocks until all events are processed. In effect, that means you have a mainloop nested inside a mainloop. It's never a good idea to have an infinite loop inside an infinite loop.

Event

Modifiers

Control
Mod1, M1, Command
Alt
Mod2, M2, Option
Shift
Mod3, M3
Lock
Mod4, M4
Extended
Mod5, M5
Button1, B1
Meta, M
Button2, B2
Double
Button3, B3
Triple
Button4, B4
Quadruple
Button5, B5
Enter fullscreen mode Exit fullscreen mode

Event types

Activate
Destroy
Map
ButtonPress, Button
Enter
MapRequest
ButtonRelease
Expose
Motion
Circulate
FocusIn
MouseWheel
CirculateRequest
FocusOut
Property
Colormap
Gravity
Reparent
Configure
KeyPress, Key
ResizeRequest
ConfigureRequest
KeyRelease
Unmap
Create
Leave
Visibility
Deactivate
Enter fullscreen mode Exit fullscreen mode

Some Examples

label.bind('<Button-1>', left_mouse_down) 
label.bind('<ButtonRelease-1>', left_mouse_up)
label.bind('<Button-3>', right_mouse_down)
label.bind('<ButtonRelease-3>', right_mouse_up)
label.bind('<B1-Motion>', moving_mouse)
label.bind('<Enter>', moving_into)
label.bind('<Leave>', moving_out)
label.bind('<FocusIn>', focus)
label.bind('<FocusOut>', unfocus)
<Double-Button-1>
<MouseWheel>
<Button-4>
<Button-5>
<Control-Button-1>
<space> # lower case
frame.bind('<Control-Shift-S>', key)
Enter fullscreen mode Exit fullscreen mode

54.1. Levels of binding

bind & bind_all
bind_all: a certain event calls a handler no matter what widget has the focus or is under the mouse
Enter fullscreen mode Exit fullscreen mode

event_generate cannot send args (data)
Generate Event Passing Data : Tkinter

Styles

Refief Styles
via: 5.6. Relief styles

# Create style Object
style = Style()

style.configure('TButton', font =
               ('calibri', 20, 'bold'),
                    borderwidth = '4')

# Changes will be reflected
# by the movement of mouse.
style.map('TButton', foreground = [('active', '! disabled', 'green')],
                     background = [('active', 'black')])
Enter fullscreen mode Exit fullscreen mode

Packages/Widgets

Widgets

Video Player

Table/Excel/DataGrid

Style/Theme

Books

Interesting

Top comments (0)