Datei Generieren

Fragen zu Tkinter.
Antworten
Andi187
User
Beiträge: 2
Registriert: Montag 24. Juli 2017, 20:15

Mein Problem ist ich weiß nicht wie ich in eine Datei den Wert von einem Checkbutton legen kann.
kurz gesagt ich möchte das wenn man den Checkbutton betätigt etwas bestimmtes in eine Datei geschrieben wird. Und mit dem Button dann die Datei generiert wird. Mit meinem Code kann ich bis jetzt alles machen ausser dem Checkbutton ein Wert hinterlegen und das es dann in die Datei reingeschrieben wird.
Mein Code sieht bis jetzt wie folgt aus :

Code: Alles auswählen

from Tkinter import *

def nd(n,e):
    ndatei = open(n+"."+e,"w")
    ndatei.writelines()
    ndatei.close()

var1= IntVar(Fenster)
C1= Checkbutton(Fenster, text="Html", variable=var1)
C1.grid(row=0,column=1,sticky=W)
B1= Button (text="Generieren", command=lambda: nd("New1","html"))
B1.grid(row=8, column=3)
Zuletzt geändert von Anonymous am Montag 24. Juli 2017, 22:11, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@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()
Antworten