Kopfrechentrainer mit GUI

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
eXact16
User
Beiträge: 3
Registriert: Mittwoch 18. Februar 2009, 17:53
Kontaktdaten:

Mittwoch 18. Februar 2009, 18:13

Hi,
ich habe zur Zeit ein Schulprojekt und soll ein "Kopfrechentrainer" mit Python programmieren. Das ganze soll mit einem GUI sein. Allerdings bin ich nicht so gut im programmieren und da wollte ich um Hilfe bitten. Wir haben noch nicht allzu lang GUI behandelt und ich hab viel in der Schule gefehlt (krankheitsbedingt). Der Kopfrechentrainer kann ganz einfach gehalten sein mit Addition und Minus auf Zeit oder so etwas. Ich habe erstmal mit GUI angefangen (ganz grob).

______________________________________________________

Code: Alles auswählen

from Tkinter import*
from random import randint

class Kopfrechentrainer(object):
    def __init__(self):
    
        self.fenster=Tk()
        self.fenster.title('Kopfrechentrainer')
        self.fenster.config(bg='blue')

        self.b3=Button(master=self.fenster,text='*',width=10,command=None,bg='white')
        self.b3.pack()

        self.b4=Button(master=self.fenster,text='/',width=10,command=None,bg='white')
        self.b4.pack()
        
        self.b5=Button(master=self.fenster,text='+',width=10,command=None,bg='white')
        self.b5.pack()
        
        self.b6=Button(master=self.fenster,text='-',width=10,command=None,bg='white')
        self.b6.pack()
       
        y=StringVar(master=self.fenster)
        y.set('Wieviele Aufgaben?')
        self.a2=Label(master=self.fenster,width=10,height=5,bg='blue',
                      font=('Arial',10),fg='White',
                      justify=RIGHT,textvariable=y,
                      relief=SUNKEN,padx=20,pady=20)
        self.a2.pack()

        self.e1=Entry(master=self.fenster,bg='Yellow',font='Times 10 bold')
        self.e1.pack()

        y=StringVar(master=self.fenster)
        y.set('Aktuelle Aufgabe: ')
        self.a1=Label(master=self.fenster,width=10,height=5,bg='blue',
                      font=('Arial',10),fg='White',
                      justify=RIGHT,textvariable=y,
                      relief=SUNKEN,padx=20,pady=20)
        self.a1.pack()

        self.e2=Entry(master=self.fenster,bg='Yellow',font='Times 10 bold')
        self.e2.pack()

        y=StringVar(master=self.fenster)
        y.set('Lösung ist: ')

        self.a3=Label(master=self.fenster,width=10,height=5,bg='blue',
                      font=('Arial',10),fg='White',
                      justify=RIGHT,textvariable=y,
                      relief=SUNKEN,padx=20,pady=20)
        self.a3.pack()

def main():
    Kopfrechentrainer()

main()
______________________________________________________

Wie soll ich jetzt weitermachen? Leider habe ich kein anderes Programm gefunden oder jemand der ein Kopfrechentrainer mit Python programmiert hat. Sonst könnte ich mich daran ein wenig orientieren. Würde mich über Hilfe/Ratschläge freuen.

eXact16
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Mittwoch 18. Februar 2009, 19:03

Hallo,

erstmal willkommen im Forum. Ein paar Anregungen von mir.
Fang zuerst mit der Programmlogik an und wenn diese funktioniert kannst du darauf dann deine GUI aufbauen.

Die durch random.randint erzeugten Zahlen könntest du in deiner GUI anzeigen lassen. Je nachdem auf welchen Button er klickt wird ein Event ausgelöst und vergleichst du das eingebene Ergebnis mit dem vom Programm errechneten Wert. Darauf gibst du eine Meldung aus.

Dann werden neue Werte errechnet und in der GUI angezeigt.

Umsetzen musst du das.
Eine komplette Lösung wird dir hier niemand liefern. Bei Problemen helfen wir dir gerne weiter.

Und statt das Programm auf Modulebene zu starten verwende folgendes:

Code: Alles auswählen


if __name__ == '__main__':
    main()
Außerdem sind Sternchenimporte sind nicht gerne gesehen.

Grüße
Martin
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 18. Februar 2009, 19:21

willkommen im forum schau dir mal diese anleitung an die hilft
http://effbot.org/tkinterbook/button.htm

from Tkinter import Tk as tk
aufruf
self.fenster=tk()
eXact16
User
Beiträge: 3
Registriert: Mittwoch 18. Februar 2009, 17:53
Kontaktdaten:

Mittwoch 18. Februar 2009, 22:35

Hi,
erstmal danke für die schnellen Antworten :).

@martin101986:
Ich habe jetzt erstmal ein neues GUI erstellt, welches schön einfach
gestaltet ist. Ich dachte das ich jetzt dein Vorschlag durchführe:
"JDie durch random.randint erzeugten Zahlen könntest du in deiner GUI anzeigen lassen. Je nachdem auf welchen Button er klickt wird ein Event ausgelöst und vergleichst du das eingebene Ergebnis mit dem vom Programm errechneten Wert. Darauf gibst du eine Meldung aus.

Dann werden neue Werte errechnet und in der GUI angezeigt."
Allerdings muss ich mir das erstmal durch den Kopf gehen lassen, wie ich das mache...

@sea-live:
Danke für die Seite, die kann noch sehr hilfreich sein.

______________________________________________________

Code: Alles auswählen

from Tkinter import *
from random import randint 

class Kopfrechentrainer(object): 
    def __init__(self):

        self.fenster=Tk()
        self.fenster.title('Kopfrechentrainer')
        self.fenster.config(bg='white')

        self.L1=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='Wie viele Aufgaben möchtest du haben?')
        self.L1.pack()

        self.E1=Entry(master=self.fenster,bg='White',font='Times 12 bold',width=5,bd='5')
        self.E1.pack()

        self.B1=Button(master=self.fenster,text='OK',font='Times 10',width=3,command=None)
        self.B1.pack()

        self.L2=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='Wie viel Sekunden möchtest du pro Aufgabe haben?')
        self.L2.pack()

        self.E2=Entry(master=self.fenster,bg='White',font='Times 12 bold',width=5,bd='5')
        self.E2.pack()

        self.B2=Button(master=self.fenster,text='OK',font='Times 10',width=3,command=None)
        self.B2.pack()

        self.L3=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='Suche dir eine Rechenart aus! ')
        self.L3.pack()
    
        self.B3=Button(master=self.fenster,text='+',font='Times 12',width=3,command=None)
        self.B3.pack()

        self.B4=Button(master=self.fenster,text='-',font='Times 12',width=3,command=None)
        self.B4.pack()

        self.B5=Button(master=self.fenster,text='*',font='Times 12',width=3,command=None)
        self.B5.pack()

        self.B6=Button(master=self.fenster,text='/',font='Times 12',width=3,command=None)
        self.B6.pack()

        self.L4=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='Aufgabe: ')
        self.L4.pack()

        self.L5=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='')
        self.L5.pack()

        self.L6=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='Lösung: ')
        self.L6.pack()

        self.E3=Entry(master=self.fenster,bg='White',font='Times 12 bold',width=5,bd='5')
        self.E3.pack()

        self.B6=Button(master=self.fenster,text='OK',font='Times 10',width=3,command=None)
        self.B6.pack()

        self.L7=Label(master=self.fenster,width=7,height=1,bg='White',
                      font=('Times New Roman',10,'bold'),fg='Black',compound=TOP,
                      bd='5',padx=120,pady=5,text='')
        self.L7.pack()
        
def main(): 
    Kopfrechentrainer() 

main()
______________________________________________________

Ist das so besser ? (Nachdem man die Lösung eingegeben hat soll ein "richtig" , "falsch" oder "Du warst zu langsam!" unter der Lösung auftauchen.
Und nachdem man seine Anzahl von Aufgaben fertig gerechnet hat kommt eine Statistik, wo man sieht wie viele Aufgaben falsch, richtig bzw zu langsam
berechnet wurden (in der Shell).)
"...statt das Programm auf Modulebene zu starten..."
Das hab ich nicht verstanden. Aber es funktioniert doch auch so :roll: ...oder ist das wichtig ?
Zuletzt geändert von eXact16 am Montag 9. März 2009, 20:05, insgesamt 2-mal geändert.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Mittwoch 18. Februar 2009, 22:50

Wenn du etwas auf Modulebene machst, wird es immer ausgeführt. Auch wenn du das Modul importierst. Will jemand die Funktionalität deines Moduls nutzen, startet er mit dem import sofort dein Programm. Deswegen hängt man immer die if __name__ .. Zeile an.
BlackJack

Mittwoch 18. Februar 2009, 23:57

@eXact16: Die Namensgebung ist extrem schlecht. Und man sollte nur das an das Exemplar von `Kopfrechentrainer` binden, was man auch in anderen Methoden benötigt, und nicht einfach *alles*.
eXact16
User
Beiträge: 3
Registriert: Mittwoch 18. Februar 2009, 17:53
Kontaktdaten:

Donnerstag 19. Februar 2009, 10:44

Ja...Um ehrlich zu sein ich hab so gut wie keine Ahnung.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 19. Februar 2009, 10:56

eXact16 hat geschrieben:Ja...Um ehrlich zu sein ich hab so gut wie keine Ahnung.
Dann erarbeite Sie Dir ;-) Gibt hier im Board zig Threads zu Themen wie man in die Python Programmierung rein findet!
Antworten