Tkinter Wert aus validate_entry in einer __init__

Fragen zu Tkinter.
Antworten
Koraktor
User
Beiträge: 9
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Samstag 14. Mai 2016, 18:14

ok der Betreff ist schon ekelhaft genug also komme ich gleich zum Punkt.
Ich versuche mit Tkinter ein tool zu erstellen in dem der User die möglichkeit hat Koordinaten (in pixel, als int() und nur als init) in ein entry ein zu tippen.
Als ich durchs internet streifte auf der suche nach möglichen lösungen fand ich das:

Code: Alles auswählen

 class VEntry:
    def __init__(self, root, own_row, own_column):
        self.own_panel = tk.Frame(root)
        self.own_panel.grid(row=own_row, column=own_column, sticky=E)

        vcmd = (root.register(self.validate),'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
        self.entry = tk.Entry(self.own_panel, validate = 'key', validatecommand = vcmd)
        self.entry.insert(0, 1)
        self.entry.grid()
        self.entry_value = self.entry.get()

    def validate(self, action, index, value_if_allowed, prior_value, text, validation_type, trigger_type, widget_name):
        if text in '0123456789':
            try:
                float(value_if_allowed)
                return True
            except ValueError:
                return False
        else:
            return False

row = 0
column = 0

root = tk.Tk()
VEntry(root, row, column)
# hier wird  print(VEntry.entry_value) stehen
root.mainloop()
Mein Problem ist nur wenn ich sowas wie print(VEntry.entry_value) ausführen will bekomme ich nur die info das es nicht existiert und ich habe keine Ahnung wie dieses Validate im allgeimenen Funktioniert so bin ich halt ein wenig auf dem Holtzweg.
Ich fand nun raus das man aus einer __init__ keine werte bekommen kann/sollte daher stellt sich mir die frage wie bekomme ich überhaubt werte daraus?

Jeder der mir da aushelfen kann ist mir Herzlich wilkommen! ^^
Sirius3
User
Beiträge: 8277
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 14. Mai 2016, 18:41

@Koraktor: VEntry ist eine Klasse und mit VEntry(...) erzeugst Du eine Instanz davon. Jetzt mußt Du diese Instanz nur noch einen Namen geben, über den Du auf deren Attribute zugreifen kannst:

Code: Alles auswählen

ventry = VEntry(root, row, column)
print(ventry.entry.get())
Koraktor
User
Beiträge: 9
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Samstag 14. Mai 2016, 19:02

@Sirius3 thx das hats gebracht! ich hab´s mit Classen noch nicht so XD
Vielen dank für die Schnelle hilfe!
Antworten