Seite 1 von 1

Checkbuttons

Verfasst: Dienstag 8. November 2005, 21:25
von 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

Verfasst: Mittwoch 9. November 2005, 19:56
von Mawilo
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

Verfasst: Mittwoch 9. November 2005, 21:29
von 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 !!

Verfasst: Mittwoch 9. November 2005, 21:33
von Mawilo
das war auch mehr dazu gedacht, dass du das Prinzip besser verstehst. Mir helfen da Beispiele immer mehr als ewig lange Manuals.

Verfasst: Mittwoch 9. November 2005, 21:36
von 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 ?

Verfasst: Mittwoch 9. November 2005, 21:42
von cycro
weißt du denn den Fehler an meinem Code ? weil ich meine es geht ja alles super nur halt die checkboxen klappen irgendwie nicht

Verfasst: Mittwoch 9. November 2005, 21:52
von Mawilo
kommentiere die Zeilen cb1["variable"]=a1 bis cb4["variable"]=a1 in den Funktionen frage2 und frage3 aus und teste noch einmal

Verfasst: Mittwoch 9. November 2005, 21:55
von 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

Verfasst: Mittwoch 9. November 2005, 21:56
von cycro
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

Verfasst: Mittwoch 9. November 2005, 22:01
von Mawilo
Also bei mir bleibt die Frage stehen. Die Variable für die Button hat nichts mit dem Label zu tun

Verfasst: Mittwoch 9. November 2005, 22:05
von cycro
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

Verfasst: Mittwoch 9. November 2005, 22:18
von Mawilo
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.

Verfasst: Mittwoch 9. November 2005, 22:21
von cycro
ok ich gucke mal ... echt vielen Dank !!!

PS Super Forum !

EDIT: Super Hat geklappt echt nochmal danke für deine Hilfe !

Verfasst: Mittwoch 9. November 2005, 22:29
von Mawilo
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.

Verfasst: Mittwoch 9. November 2005, 22:32
von cycro
oh danke