@Andi187: Ich weiss nicht ob ich das Problem wirklich verstehe. Soll wirklich etwas in eine Datei geschrieben werden wenn der *Checkbutton* ”betätigt” wird oder soll nicht eher etwas in eine Datei geschrieben werden wenn der Button mit 'Generieren' als Beschriftung gedrückt wird und wenn der Checkbutton dann angekreuzt ist?
Du solltest auf jeden Fall mehr Zeit auf gute Namen verwenden. Warum sind das alles so kurze Namen die nichts aussagen? Warum sind an einigen sinnlose Einsen angehängt?
Wo ist das konkrete Problem? Ist Dir nicht klar was der `NameError` wegen `Fenster` bedeutet?
Ansonsten: Sternchen-Importe sind Böse™. Damit verliert man schnell den Überblick was wo definiert wurde und es besteht die Gefahr von Namenskollisionen. `Tkinter` wird üblicherweise mit ``import Tkinter as tk`` importiert. Damit kann man dann über den Namen `tk` auf die Werte in dem Modul zugreifen. Also Beispielsweise ``tk.Checkbutton(…)``.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Für GUI-Programmierung braucht man letztlich objektorientierte Programmierung. Rein mit Funktionen kommt man da nicht weit. Auch wenn es bei dem Beispiel vielleicht noch ginge, aber man erreicht da recht schnell das Ende.
Beim `Button` hast Du vergessen das Elternwidget zu übergeben.
Die beiden Buttons brauchen keine Namen bekommen, denn sie werden ja nicht wirklich gebraucht nachdem sie erstellt und angeordnet sind.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import Tkinter as tk
def create_file(filename, some_boolean_argument_that_needs_a_better_name):
with open(filename, 'w') as out_file:
out_file.writeline(
'Wert: {}\n'.format(some_boolean_argument_that_needs_a_better_name)
)
def main():
root = tk.Tk()
variable_that_needs_a_better_name = tk.BooleanVar()
tk.Checkbutton(
root, text='Html', variable=variable_that_needs_a_better_name
).grid(row=0, column=0, sticky=tk.W)
tk.Button(
root,
text='Generieren',
command=lambda: create_file(
'test.txt', variable_that_needs_a_better_name.get()
),
).grid(row=1, column=1)
root.mainloop()
if __name__ == '__main__':
main()