Taschenrechner-Display

Fragen zu Tkinter.
Antworten
Commander
User
Beiträge: 15
Registriert: Dienstag 20. Mai 2014, 16:05

Guten Tag.
Ich habe schon lange gegoogelt,aber nichts richtiges gefunden.
Ich weiß einfach nicht,wie ich ein Display in den Taschenrechner einbauen kann,indem alle eingegebenen Zahlen angezeigt werden und auch Ergebnisse.
Ebenso wäre ich froh,wenn jemand mir erklären könnte,wie ich den Wert 1 auf das Display übertragen lassen kann.
Im Moment habe ich bei jedem Button einfach nur print Befehle drinne.

Code: Alles auswählen

from tkinter import *
import sys


def init_gui(root):



    def clean():
        print(A)
        
    def delete():
        print(T)

    def komma():
        print('.')
        
    def zahl0():
        print(1)
            

    def zahl1():
        print(1)
    
        
    def zahl2():
        print(2)
    
   


    clean_bt=Button(text='C',font='bold',width=3,height=2,command=zahl1)
    clean_bt.place(x=175,y=210)
    clean_bt['bg'] = 'white'


    delete_bt=Button(text='<~',font='bold',width=3,height=2,command=zahl1)
    delete_bt.place(x=120,y=210)
    delete_bt['bg'] = 'white'
    

    komma_bt=Button(text=',',font='bold',width=3,height=2,command=zahl1)
    komma_bt.place(x=65,y=210)
    komma_bt['bg'] = 'white'
    

    
    zahl0_bt=Button(text='0',font='bold',width=3,height=2,command=zahl1)
    zahl0_bt.place(x=10,y=210)
    zahl0_bt['bg'] = 'white'
    
    zahl1_bt=Button(text='1',font='bold',width=3,height=2,command=zahl1)
    zahl1_bt.place(x=10,y=160)
    zahl1_bt['bg'] = 'white'
    
    zahl2_bt=Button(text='2',font='bold',width=3,height=2,command=zahl1)
    zahl2_bt.place(x=65,y=160)
    zahl2_bt['bg'] = 'white'
    
    zahl3_bt=Button(text='3',font='bold',width=3,height=2,command=zahl1)
    zahl3_bt.place(x=120,y=160)
    zahl3_bt['bg'] = 'white'

    zahl4_bt=Button(text='4',font='bold',width=3,height=2,command=zahl1)
    zahl4_bt.place(x=10,y=110)
    zahl4_bt['bg'] = 'white'

    zahl5_bt=Button(text='5',font='bold',width=3,height=2,command=zahl1)
    zahl5_bt.place(x=65,y=110)
    zahl5_bt['bg'] = 'white'

    zahl6_bt=Button(text='6',font='bold',width=3,height=2,command=zahl1)
    zahl6_bt.place(x=120,y=110)
    zahl6_bt['bg'] = 'white'

    zahl7_bt=Button(text='7',font='bold',width=3,height=2,command=zahl1)
    zahl7_bt.place(x=10,y=60)
    zahl7_bt['bg'] = 'white'

    zahl8_bt=Button(text='8',font='bold',width=3,height=2,command=zahl1)
    zahl8_bt.place(x=65,y=60)
    zahl8_bt['bg'] = 'white'

    zahl9_bt=Button(text='9',font='bold',width=3,height=2,command=zahl1)
    zahl9_bt.place(x=120,y=60)
    zahl9_bt['bg'] = 'white'


    


root=Tk() 
root.geometry('220x300')
init_gui(root)
root.configure(bg='Gainsboro')
root.mainloop()
root.destroy()
BlackJack

@Commander: Ich würde sagen ein Taschenrechner ist eventuell noch zu kompliziert. Erst einmal sollte man die Grundlagen lernen bis inklusive objektorientierter Programmierung. Ohne wird das mit der GUI nämlich nahezu zwangsläufig Murks. Dann ist so ein normaler Taschenrechner gar nicht so einfach wie man auf den ersten Blick denken mag. Man sollte sich dazu mit so etwas wie Zustandsautomaten beschäftigen, und wie man die in Code umsetzen kann. Oder man setzt einen RPN-Rechner um (RPN → Reverse Polish Notation), dann ist das Modell wesentlich einfacher.
Commander
User
Beiträge: 15
Registriert: Dienstag 20. Mai 2014, 16:05

Vielen Dank für deine Antwort.

Das Problem ist leider...es ist eine Hausarbeit und ich habe bis zum 16.06. Zeit.
Ich frage mich auch,wie wir mit unserem gelernten Wissen einen Taschenrechner programmieren sollen.
Bisher haben wir uns nur mit Buttons und Labels beschäftigt um z.B. eine Ampel zu erstellen.

Edit:
Hab jetzt eine Lösung gefunden mit den Buttons,aber ich brauche immernoch ein Display.
Ist anscheinend besser,die Buttons generieren zu lassen anstatt sie manuell einzeln einzufügen.

Wenn ich im Internet gucke,kann ich alles gelernte wegwerfen und mir stundenlang Tutorials ansehen.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Forum scheint gerade immer mit der selben Taschenrechnerhausaufgabe überschwemmt zu werden. Da kannst Du Dich ja mit Deinen Kollegen austauschen ;-)
BlackJack

@Commander: Tutorials *ansehen* wird nicht reichen, die muss man *durcharbeiten*, also nachvollziehen was da gemacht wird, selber mit dem Code experimentieren, in der Dokumentation die Details nachschlagen, und so weiter.

Am gezeigten Quelltext fällt übrigens als erstes der Sternchen-Import auf, und als nächstes `place()`. Das sollte man beides nicht machen. Mit dem Sternchen-Import müllt man sich das Modul mit ca. 190 Namen zu, von denen man nur einen ganz kleinen Bruchteil tatsächlich verwendet, und `place()` ist keine gute Idee weil es heutzutage *sehr* unterschiedliche Anzeigegrössen und -auflösungen, und damit auch Einstellungen wie Schriftgrössen und so weiter gibt. Für das anordnen von Taschenrechnertasten würde sich zum Beispiel ein `grid()` deutlich besser eignen. Da werden die Zellen und Anordnungen automatisch so gewählt und platziert, dass der Inhalt hinein passt.

Die Anzeige könnte man beispielsweise mit einem `tkinter.Label` machen.

Aber Grundsätzlich sollte man erst einmal die Programmlogik modellieren, und zwar unabhängig von der GUI und als Klasse. Also wären wir wieder bei: Man sollte erst einmal die Grundlagen inklusive OOP lernen.
Commander
User
Beiträge: 15
Registriert: Dienstag 20. Mai 2014, 16:05

Puh,natürlich auch durcharbeiten :D
Das ist problematisch,wenn das Gelernte wirklich nicht von Vorteil ist.
Kann ich mit grid() auch die Farbe,Größe,etc. bestimmen?
BlackJack

@Commander: Nein das geht mit `grid()` nicht. Aber mit `place()` auch nicht, also verstehe ich die Frage an der Stelle nicht!?

Edit: Also die Grösse indirekt, letztendlich will man ja die Grösse gar nicht selber festlegen, sondern dass die a) so gross ist, dass der Inhalt hinein passt, und b) vielleicht das ein gewisser Platz ausgefüllt wird damit es regelmässig aussieht. Und b) kann man mit `grid()` erreichen.
Antworten