Combobox

Fragen zu Tkinter.
Antworten
rodiboki
User
Beiträge: 8
Registriert: Freitag 17. Mai 2024, 12:58

Hallo,

aus einem Tutorial habe ich folgendes abgeändert:

Code: Alles auswählen


from tkinter import *
from tkinter.ttk import Combobox

def main():

    query()
    return

def query():

    root = Tk()
    root.title("Combobox")

    CoBoListe = ["wählen", "Alpha", "Bravo", "Charlie", "Delta", "Foxtrott", "Hotel", "Golf"]

    But = Button(root, text='Quit', command=root.quit)
    CoBo = Combobox(root, height = 5, width = 15, values = CoBoListe)

    CoBo.pack()
    But.pack()

    CoBo.set(CoBoListe[0])
    CoBo.bind("<<ComboboxSelected>>", CoBoOut)

    root.mainloop()
    root.destroy()
    return

def CoBoOut(event):

    # wie komme ich hier an das Selektierte ran ?
    return

if __name__ == "__main__":
    main()
    

Wie komme ich in CoBoOut an das Selektierte der Combobox ran ?

Gruß
Mathias
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Klassen (PascalCase) und Konstanten (KOMPLETT_GROSS).

Der richtige Weg ist hier der Einsatz einer Klasse, in der sich die entsprechenden Zustände gemerkt werden.
Jedes nicht triviale GUI-Programme benötigt Objektorentierung.
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Man benutzt keine *-Importe, weil man sich da unkontrolliert Namen in den eigenen Namensraum schaufelt.
Kryptische Abkürzungen sind schlecht, weil man rätseln muß, was die denn bedeuten sollen.
Funktionen, die keinen Return-Wert haben, brauchen kein `return`.
Am besten Arbeitet man für Eingaben mit Var-Objekten, dann ist man unabhängig von der eigentlichen Darstellung.

Hier ein Beispiel, wie man noch mit `functools.partial` an die Daten kommt.

Code: Alles auswählen

import tkinter as tk
from tkinter.ttk import Combobox
from functools import partial

SPELLING_ALPHABET = [
    "wählen",
    "Alpha",
    "Bravo",
    "Charlie",
    "Delta",
    "Foxtrott",
    "Hotel",
    "Golf",
]


def changed(*args, selection=None):
    print(selection.get())


def main():
    root = tk.Tk()
    root.title("Combobox")

    letter_selection = tk.StringVar(root, SPELLING_ALPHABET[0])
    letter_selection.trace("w", partial(changed, selection=letter_selection))

    Combobox(
        root,
        height=5,
        width=15,
        values=SPELLING_ALPHABET,
        textvariable=letter_selection,
    ).pack()
    tk.Button(root, text="Quit", command=root.quit).pack()

    root.mainloop()
    root.destroy()


if __name__ == "__main__":
    main()
Für alle nicht-trivialen GUI-Programme braucht man Klassen.
rodiboki
User
Beiträge: 8
Registriert: Freitag 17. Mai 2024, 12:58

Hallo,

danke, das hilf mir weiter.

Mir ist klar wie die Konventionen beim programmieren sind, aber es ist ja nur ein Beispiel...

Gruß
Mathias
Antworten