The tkinter combobox and spinbox widgets

preview_player
Показать описание
This tutorial covers the combobox and the spinbox widgets of tkinter. Both cover drop-down menus, just in slightly different ways.
Рекомендации по теме
Комментарии
Автор

for CTk the event for comboboxes doesn't work..
I fixed this by creating this callback function and putting it in the "command=callback" of the combobox

def callback(choice):
food_string.set(choice)
combolabel.configure(text = f"Selected value: {food_string.get()}")

Just for people that are following this tutorial but are using customtkinter.
Love your content tho! verry helpfull <3

cocogswy
Автор

um.. this is the first time i dont quite agree... we are not Done.... on the spinbox
when you press down it prints the value it WAS, but the spinbox changes to a different value
for example... it shows a 'C'.. press down
The spin box changes to 'B'
but it Prints 'C'
it is printing the value it is changing from - you can see this on your screen example too but, because yo do it so quick it is not obvious
this only seems to happen when using the events - the event is triggering, it seems, when the down is pressed - BEFORE the box chanegs value - after processing the event . THEN the spinbox make sthe change to eth variable... OUCH

if i just use command=... then the function gets processed, apparently, AFTER the spin box value is changed - and so the screen and print statement align
this code shows it VERY clearly - the command label always shows the same as the spinbox. But the event label is always "one behind"

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.geometry('800x600')

def sLabelUpdate():
triggers : {spin_string.get()}')

spin_string = tk.StringVar()
values = ['A', 'B', 'C', 'D', 'E']
commandLabel = ttk.Label(window, text="...")
commandLabel.pack()
spin = ttk.Spinbox(
window,
textvariable=spin_string,
values=values,
command = sLabelUpdate
)
spin.pack()
spinEventLabel = ttk.Label(window, text='...')
spinEventLabel.pack()
spin.bind('<<Increment>>', lambda event: triggers : {spin_string.get()}'))
spin.bind('<<Decrement>>', lambda event: triggers : {spin_string.get()}'))
tk.mainloop()

garmrdmr