Checkbuttons

Fragen zu Tkinter.
Antworten
cycro

Hi
Bin neu hier hab euch grade erst gefunden und hoffe das ihr mir helfen könnt.
Also ich will ein Programm in der Art eines Quizes erstellen habe das ganze mit Checkbuttons gemacht läuft auch einigermaßen nur das ich ab der 2. Frage kein Kästchen auswählen kann.
Die ganze geschichte ist mit TKinter gemacht.

Hier mal der Quellcode

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import*

##frage01 = "Wozu gehört die Funktion askokcancel()?"
##frage02 = "Was bedeutet die Funktion Tcl ?"
##frage03 = "Welche Schleifen gibt es ?"
##frage04 = "Wie kann man Buttons im Fenster anordnen ?"

def frage1():
    if a1.get()=="":
        a1.set()
    if a2.get()=="":
        a2.set("")
    if a3.get()=="":
        a3.set("")
    if a4.get()=="":
        a4.set("")
    lb["text"]="Wozu gehört die Funktion askokcancel()?"
    bende["command"]=auswerten1

def auswerten1():
    if a1.get()=='gehört dazu':
        lb["text"]='Richtig'
    else:
        lb["text"]='nicht ganz so richtig'
    bende["text"]="Weiter"
    bende["command"]=frage2

def frage2():
    a1 = StringVar()
    a1.set("")
    a2 = StringVar()
    a2.set("")
    a3 = StringVar()
    a3.set("")
    a4 = StringVar()
    a4.set("")
    lb["text"]="Was ist die Funktion Tcl ?"
    cb1["text"]="Tool command language"
    cb1["variable"]=a1
    cb1["command"]=frage2
    cb2["text"]="Total control listing"
    cb2["variable"]=a2
    cb2["command"]=frage2
    cb3["text"]="Time center language"
    cb3["variable"]=a3
    cb3["command"]=frage2
    cb4["text"]="Tool cross language"
    cb4["variable"]=a4

    cb4["command"]=frage2
    bende["command"]=auswerten2

def auswerten2():
    if a2.get()=='gehört dazu':
        lb["text"]='Richtig'
    else:
        lb["text"]='Falsch'
    bende["text"]="Weiter"
    bende["command"]=frage3

def frage3():
    a1 = StringVar()
    a1.set("")
    a2 = StringVar()
    a2.set("")
    a3 = StringVar()
    a3.set("")
    a4 = StringVar()
    a4.set("")
    lb["text"]="Welche Schleifen gibt es ?"
    cb1["text"]="solong"
    cb1["variable"]=a1
    cb1["command"]=frage3
    cb2["text"]="while"
    cb2["variable"]=a2
    cb2["command"]=frage3
    cb3["text"]="if"
    cb3["variable"]=a3
    cb3["command"]=frage3
    cb4["text"]="from"
    cb4["variable"]=a4
    cb4["command"]=frage3
    bende["command"]=auswerten3

def auswerten3():
    if a2.get()+a3.get()=='gehört dazu':
        lb["text"]='Richtig'
    else:
        lb["text"]='Falsch'
    bende["text"]="Ende"
    bende["command"]=ende

def ende():
    hf.destroy()

hf=Tk()
lb= Label(hf,text = "Wozu gehört die Funktion askokcancel ()?",width=60)
lb.pack()
a1 = StringVar()
a1.set("")
a2 = StringVar()
a2.set("")
a3 = StringVar()
a3.set("")
a4 = StringVar()
a4.set("")
cb1 = Checkbutton(hf,text="Message-Boxen ",variable=a1,onvalue="gehört dazu", offvalue="gehört nicht dazu",command = frage1)
cb1.pack(side = LEFT,expand=NO)
cb2 = Checkbutton(hf,text="Binding",variable=a2,onvalue="gehört dazu",offvalue="gehört nicht dazu",command = frage1)
cb2.pack(side = LEFT,expand=NO)

cb3 = Checkbutton(hf,text="GUI",variable=a3,onvalue="gehört dazu", offvalue="gehört nicht dazu",command = frage1)
cb3.pack(side = LEFT,expand=NO)
cb4 = Checkbutton(hf,text="Label",variable=a4,onvalue="gehört dazu", offvalue="gehört nicht dazu",command = frage1)
cb4.pack(side = LEFT,expand=NO)
bende=Button(hf,text="weiter",command =ende)
bende.pack()
hf.mainloop()
EDIT by mawe: code in Python-tags gesetzt
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

ich habe deinen Code mal etwas überarbeitet. :wink:
Da geht zwar noch einiges zusammenzufassen, aber für'n Anfang sollte das funktionieren.

Code: Alles auswählen

# -*- coding: cp1252 -*-

from Tkinter import *

### Definition der Fragen und möglichen Antworten ###
frage01 = "Wozu gehört die Funktion askokcancel ()?"
ant1_1 = "Message-Boxen "
ant1_2 = "Binding"
ant1_3 = "GUI"
ant1_4 = "Label"

frage02 = "Was bedeutet die Funktion Tcl ?"
ant2_1 = "Tool command language"
ant2_2 = "Total control listing"
ant2_3 = "Time center language"
ant2_4 = "Tool cross language"

frage03 = "Welche Schleifen gibt es ?"
ant3_1 = "solong"
ant3_2 = "while"
ant3_3 = "if" 
ant3_4 = "from"

##frage04 = "Wie kann man Buttons im Fenster anordnen ?" 


class Quiz:
    def __init__(self):
        self.hf=Tk()
        self.frage = StringVar()
        self.ant1 = StringVar()
        self.ant2 = StringVar()
        self.ant3 = StringVar()
        self.ant4 = StringVar()        
        self.frage.set('Herzlich willkommen')
        self.lb= Label(self.hf,textvariable=self.frage,width=60) 
        self.lb.pack()
        self.var_cb1 = StringVar()
        self.var_cb1.set('nein')
        self.cb1 = Checkbutton(self.hf,
                               textvariable=self.ant1,
                               variable=self.var_cb1,
                               onvalue="ja",
                               offvalue="nein") 
        self.cb1.pack(anchor=W)
        self.var_cb2 = StringVar()
        self.var_cb2.set('nein')
        self.cb2 = Checkbutton(self.hf,
                               textvariable=self.ant2,
                               variable=self.var_cb2,
                               onvalue="ja",
                               offvalue="nein") 
        self.cb2.pack(anchor=W)
        self.var_cb3 = StringVar()
        self.var_cb3.set('nein')
        self.cb3 = Checkbutton(self.hf,textvariable=self.ant3,
                               variable=self.var_cb3,
                               onvalue="ja",
                               offvalue="nein")
        self.cb3.pack(anchor=W)
        self.var_cb4 = StringVar()
        self.var_cb4.set('nein')
        self.cb4 = Checkbutton(self.hf,textvariable=self.ant4,
                               variable=self.var_cb4,
                               onvalue="ja",
                               offvalue="nein") 
        self.cb4.pack(anchor=W) 
        self.bende=Button(self.hf,
                          text="Start",
                          command =self.set_next,
                          width=15) 
        self.bende.pack()
        self.next = StringVar()
        self.next.set('frage1')
        self.hf.mainloop()


    def ersteFrage(self):
        self.frage.set(frage01)
        self.ant1.set(ant1_1)
        self.ant2.set(ant1_2)
        self.ant3.set(ant1_3)
        self.ant4.set(ant1_4)
        self.next.set('antwort1')
        self.clearButton()
        
    def zweiteFrage(self):
        self.frage.set(frage02)
        self.ant1.set(ant2_1)
        self.ant2.set(ant2_2)
        self.ant3.set(ant2_3)
        self.ant4.set(ant2_4)
        self.next.set('antwort2')
        self.clearButton()
        
    def dritteFrage(self):
        self.frage.set(frage03)
        self.ant1.set(ant3_1)
        self.ant2.set(ant3_2)
        self.ant3.set(ant3_3)
        self.ant4.set(ant3_4)
        self.next.set('antwort3')
        self.clearButton()

    def auswerten1(self):
        if (self.var_cb1.get()=='ja')\
        and(self.var_cb2.get()=='nein')\
        and(self.var_cb3.get()=='nein')\
        and(self.var_cb4.get()=='nein'):
            self.frage.set('richtig')
            self.next.set('frage2')
        else:
            self.frage.set('falsche Antwort')
            
    def auswerten2(self):
        if (self.var_cb1.get()=='nein')\
        and(self.var_cb2.get()=='ja')\
        and(self.var_cb3.get()=='nein')\
        and(self.var_cb4.get()=='nein'):
            self.frage.set('richtig')
            self.next.set('frage3')
        else:
            self.frage.set('falsche Antwort')
            
    def auswerten3(self):
        if (self.var_cb1.get()=='nein')\
        and(self.var_cb2.get()=='ja')\
        and(self.var_cb3.get()=='ja')\
        and(self.var_cb4.get()=='nein'):
            self.frage.set('richtig, Glückwunsch')
        else:
            self.frage.set('falsche Antwort')

    def set_next(self):
        self.bende['text'] = 'Weiter'
        if self.next.get() == 'frage1':
            self.ersteFrage()
        elif self.next.get() == 'antwort1':
            self.auswerten1()
        elif self.next.get() == 'frage2':
            self.zweiteFrage()
        elif self.next.get() == 'antwort2':
            self.auswerten2()
        elif self.next.get() == 'frage3':
            self.dritteFrage()
        elif self.next.get() == 'antwort3':
            self.auswerten3()

    def clearButton(self):
        self.var_cb1.set('nein')
        self.var_cb2.set('nein')
        self.var_cb3.set('nein')
        self.var_cb4.set('nein')
                
if __name__ == '__main__':
    Quiz()
Stephan
Gast

cool danke , da gibs nur 1 problem die ganze sache is eine schulaufgabe (wir dürfen uns ja helfen lassen) aber das sieht zu sehr nach nicht selbst geschrieben aus ^^

würde das auch so klappen also das es so ähnlich aussieht wie mein Quellcode ?

Trozdem erstmal vielen dank !!
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

das war auch mehr dazu gedacht, dass du das Prinzip besser verstehst. Mir helfen da Beispiele immer mehr als ewig lange Manuals.
cycro

das ist schon richtig ... ich habe ja auch nicht erwartet das mir jemand das komplett abnimmt..

achja kannt su mir erklären wie das mit dem ganzen

self.

zusammenhängt ?
cycro
User
Beiträge: 5
Registriert: Mittwoch 9. November 2005, 21:36

weißt du denn den Fehler an meinem Code ? weil ich meine es geht ja alles super nur halt die checkboxen klappen irgendwie nicht
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

kommentiere die Zeilen cb1["variable"]=a1 bis cb4["variable"]=a1 in den Funktionen frage2 und frage3 aus und teste noch einmal
Gast

jo dann gehts, nur ich habe das gemcht weil ohne diese zeilen verändert sich die frage beim anklicken eines feldes in die 1. Frage das ist ja mein einziges Problem
cycro
User
Beiträge: 5
Registriert: Mittwoch 9. November 2005, 21:36

komisch irgendwie hat der login hier grade nicht geklapt
Anonymous hat geschrieben:jo dann gehts, nur ich habe das gemcht weil ohne diese zeilen verändert sich die frage beim anklicken eines feldes in die 1. Frage das ist ja mein einziges Problem
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Also bei mir bleibt die Frage stehen. Die Variable für die Button hat nichts mit dem Label zu tun
cycro
User
Beiträge: 5
Registriert: Mittwoch 9. November 2005, 21:36

oh sorry habe mich verlesen dachte du meinst "cb4["command"]=frage2" die sachen

aber jetzt gibt es wie der ein Problem was mit "cb1["variable"]=a1" beseitigt war undzwar bleibt jetzt das Häckschen im kasten also die antwort bleibt bei der nächsten frage makiert
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Dann schau dir mal mein Beispiel an. Ich habe mit der Funktion clearButton die Variable der Button wieder auf der offvalue Wert gesetzt. Damit verschwindet das Häckchen. Du hast in deinem Code ein ziemliches Durcheinander mit den ganzen Variablen.
Für die Checkbutton findest du hier eine Beschreibung.
cycro
User
Beiträge: 5
Registriert: Mittwoch 9. November 2005, 21:36

ok ich gucke mal ... echt vielen Dank !!!

PS Super Forum !

EDIT: Super Hat geklappt echt nochmal danke für deine Hilfe !
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Du solltest dir auch noch einmal die Funktion auswerten3 anschauen. Die Frage kann nie richtig beantwortet werden, da

Code: Alles auswählen

a2.get()+a3.get()
als Ergebnis

Code: Alles auswählen

gehört dazugehört dazu
ausspuckt und damit die Bedingung immer falsch ist.
cycro
User
Beiträge: 5
Registriert: Mittwoch 9. November 2005, 21:36

oh danke
Antworten