Seite 1 von 1

Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 16:55
von Scriptinggamer
Hallo Forum,
In meiner neuen Vokabeltrainer-Version möchte ich eine Checkbox von Anfang an ausgewählt haben, aber sie will einfach nicht! Ich benutze ein Toplevel in einer Klasse:

Code: Alles auswählen

import tkinter as tk

class App:
    def __init__(self):
        self.master = tk.Toplevel()
        self.check_var = tk.IntVar(self.master)
        self.check_var.set(1)

        checkbox = tk.Checkbutton(self.master, variable = self.check_var)
        checkbox.pack()

master = tk.Tk()
App()
master.mainloop()
Was kann ich da machen?
Vielen Dank
Gruß

Re: Entry ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 17:25
von BlackJack
@Scriptinggamer: Wenn Du ein `Entry` haben möchtest, musst halt eines erstellen. Das es ausgewählt ist, sollte man mit der `focus_set()`-Methode erreichen können.

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 17:45
von Scriptinggamer
Ach, Entry, bin ich doof, checkbox mein ich natürlich :S

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 19:13
von Scriptinggamer
LOL

Code: Alles auswählen

import tkinter as tk

class App:
    def __init__(self):
        self.master = tk.Toplevel()
        self.check_var = tk.IntVar(self.master)
        self.check_var.set(1)

        checkbox = tk.Checkbutton(self.master, variable = self.check_var)
        button = tk.Button(self.master, text = "Checked?",
                           command = self.print_number)
        checkbox.pack()
        button.pack()

    def print_number(self):
        print(self.check_var.get())

master = tk.Tk()
App()
master.mainloop()
Das funktioniert. Warum? Nur weil die Klasse eine weitere Methode hat? Häääääääääääää?
Gruß

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 21:08
von BlackJack
@Scriptinggamer: Ist vielleicht auch nur Glückssache. Überleg mal wie lange Dein `App`-Exemplar existiert.

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 21:21
von Scriptinggamer
Glücksache in der Programmierung?
Ich hab jetzt auch dem Button in dem Programm an dem ich grade arbeite (Easy Learn - Vocabeltrainer) eine Methode zugewiesen und da klappts jetzt auch einwandfrei, es muss irgendwie daran liegen das noch mal auf self zugegriffen wird oder so.
Danke
Gruß

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Freitag 14. September 2012, 21:57
von BlackJack
@Scriptinggamer: Glückssache beim Programmablauf. Dass das so funktioniert ist IMHO alles andere als garantiert. Du erstellst ein Exemplar von `App` und das kann danach *sofort* wieder zerstört werden, weil Du nichts damit machst. Wenn Du nicht möchtest, dass Dein Programm nur zufällig funktioniert, solltest Du es vielleicht an einen Namen binden um sicher zu stellen das es nicht wieder zerstört wird.

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Samstag 15. September 2012, 08:19
von Scriptinggamer
Ich verstehe nicht wieso es zerstört werden sollte, ich benutze solche Klassen mein ganzes Programm durch ohne ein einziges Problem, ich dachte Instanzen von Klassen lassen sich nur mit dem del befehl löschen, aber wenn das programmiertechnisch besser ist das kann ich das ja mal ausprobieren.
Danke
Gruß

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Samstag 15. September 2012, 08:34
von BlackJack
@Scriptinggamer: Man kann Objekte nicht selber explizit löschen und ``del`` löscht Namen oder Referenzen aber keine Objekte. Objekte können von der Laufzeitumgebung gelöscht werden wenn sie nicht mehr über Namen oder Referenzen erreichbar sind. Wenn Du einfach nur ``App()`` als Ausdruck da hinschreibst, dann wird ein Exemplar dieser Klasse erstellt. Und ist danach sofort wieder „zum Abschuss” freigegeben, denn in den nachfolgenden Programmzeilen hast Du keine Möglichkeit mehr auf das Objekt zuzugreifen. Warum sollte die Laufzeitumgebung das also nicht löschen (dürfen)?

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Samstag 15. September 2012, 10:42
von Scriptinggamer
Tja, eigentlich weil das objekt ja selber noch Funktionen aufrufen kann die auf es zu greifen, aber ok, habe ich überall in meinem skript geändert und werds mir merken :D
Danke

Re: Checkbox ist anfangs nicht selektiert

Verfasst: Samstag 15. September 2012, 10:48
von BlackJack
@Scriptinggamer: Die `__init__()` könnte irgend etwas aufrufen und dort sich selbst übergeben und der aufgerufene Code könnte eine Referenz irgendwo speichern — aber auch das passiert ja bei Deinem Code nicht. Und auf so einen Seiteneffekt sollte man sich auch nicht verlassen. Das ist ziemlich undurchsichtig.