User Tools

Site Tools


tkinter_calc_ii

TKInter Calc II

Themed Widgets

Use ttk.button() etc. whenever possible. That's because ttk is the newest version. tk.button() and others are old, don't use them unless ttk. doesn't work.

Binding

For example, you may wish to bind a key to a button. This helps you streamline the control of an application. If you just have two input methods there could be a problem with things like arrows and backspace or delete messing up the calculator window.

import tkinter as tk
from tkinter import ttk

def press_eq(event):
    print('Equals key pressed.')

root = tk.Tk()

button1 = ttk.Button(root, text='=')
button1.bind('<KeyPress-Return>', press_eq)


button1.focus()
button1.pack(expand=True)

root.mainloop()

Binding Mouse

Observe carefully that <Button> and <Button-1> events are both the same event, but one has a specifier. Events such as <KeyPress> and <KeyPress-Enter> are discussed on some sites such as https://www.pythontutorial.net/tkinter/tkinter-event-binding/.

import tkinter

root = tkinter.Tk()

def right_click_handler(event):
    # event.num == 2 is MOUSE.
    if event.num == 2:
        print("RIGHT CLICK")

root.bind("<Button-1>", lambda x: print("LEFT CLICK"))
root.bind("<Button>", right_click_handler)

root.mainloop()

Here, a lambda is used to handle left clicks with <Button-1> while the more general <Button> handles both left and right, but uses

event.num == 2

to determine right click vs. left click, so it could handle both if needed.

Dragging

To capture a click-and-drag event use any of the <B1-Motion> (left-click), <B2-Motion> (right click) or <B3-Motion> (middle mouse button click). Note that Note that when dragging outside of an element the event still fires.

import tkinter

root = tkinter.Tk()
label = tkinter.Label(root, text="HEY")
label.pack()

def drag_handler(event):
print(event.x, event.y)

label.bind("<B1-Motion>", drag_handler)

root.mainloop()

Hovering

Hovering over an element sends out two events in sequence, <Enter> and <Leave>

import tkinter

root = tkinter.Tk()

label = tkinter.Label(root, text="HELLO", bg="white", fg="navy")
label.bind("<Enter>", lambda event: event.widget.config(bg="navy", fg="white"))
label.bind("<Leave>", lambda event: event.widget.config(bg="white", fg="navy"))
label.pack()

root.mainloop()
tkinter_calc_ii.txt · Last modified: 2024/04/20 00:53 by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki