GUI eines Taschenrechner

Fragen zu Tkinter.
Antworten
Neueinsteiger
User
Beiträge: 4
Registriert: Sonntag 2. Dezember 2007, 14:49

Hallo ich bin absoluter Neueinsteiger in der Sprache Python und bin grad dabei die GUI eines Taschenrechners zu implementieren.
Das Erstellen von Buttons bereitet mir keine Probleme.
Wie erstelle ich jedoch eine Menüleiste und ein Display?

Über Antwoten und Hilfe würde ich mich sehr freuen.

Danke im Vorraus
:D
Benutzeravatar
sorgenlos
User
Beiträge: 69
Registriert: Donnerstag 15. Februar 2007, 00:52

Ich wüsste nicht wie eine Menubar zu realisieren wäre, da müsste man sich was zusammenbasteln mit labels, dazu nimmst du lieber wxPython.

Aber das Anzeigefeld könnte ein Entryfeld sein in dem die Werte immer ausgegeben werden.

Code: Alles auswählen

self.entry1=IntVar()
entry1=Entry(fenster,width=8,textvariable=self.entry1)
entry1.place(x=50, y=50)

Code: Alles auswählen

self.entry1.set(wasauchimmer)
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

sorgenlos hat geschrieben:Ich wüsste nicht wie eine Menubar zu realisieren wäre, da müsste man sich was zusammenbasteln mit labels......
das muss man sich nichts zusammenbasteln sorgenlos. :evil:
http://effbot.org/tkinterbook/menu.htm
Neueinsteiger
User
Beiträge: 4
Registriert: Sonntag 2. Dezember 2007, 14:49

Danke für die hilfe, aber wenn ich das da einbaue klappt es immer noich nicht.

Hier mal mein Programmcode:

Code: Alles auswählen

import Tkinter
from Tkinter import *

class rechner:
    def eins(self):
        self.fenster=Tkinter.Tk()
        self.fenster.geometry("300x300")
        self.fenster.title('Rechner')
        self.entry1=IntVar()
        entry1=Entry(fenster,width=8,textvariable=self.entry1)
        entry1.place(x=50,y=50)

        button_7=Button(self.fenster,text='7',width=4,height=2)
        button_7.grid(row=1,column=1,sticky=N)
        button_8=Button(self.fenster,text='8',width=4,height=2)
        button_8.grid(row=1,column=2,sticky=N)
        button_9=Button(self.fenster,text='9',width=4,height=2)
        button_9.grid(row=1,column=3,sticky=N)
        button_4=Button(self.fenster,text='4',width=4,height=2)
        button_4.grid(row=2,column=1,sticky=N)
        button_5=Button(self.fenster,text='5',width=4,height=2)
        button_5.grid(row=2,column=2,sticky=N)
        button_6=Button(self.fenster,text='6',width=4,height=2)
        button_6.grid(row=2,column=3,sticky=N)
        button_1=Button(self.fenster,text='1',width=4,height=2)
        button_1.grid(row=3,column=1,sticky=N)
        button_2=Button(self.fenster,text='2',width=4,height=2)
        button_2.grid(row=3,column=2,sticky=N)
        button_3=Button(self.fenster,text='3',width=4,height=2)
        button_3.grid(row=3,column=3,sticky=N)
        button_0=Button(self.fenster,text='0',width=4,height=2,)
        button_0.grid(row=4,column=1,sticky=N)
        
        button_div=Button(self.fenster,text='/',width=4,height=2,foreground = "red")
        button_div.grid(row=1,column=4,sticky=N)
        button_mul=Button(self.fenster,text='*',width=4,height=2,foreground = "red")
        button_mul.grid(row=2,column=4,sticky=N)
        button_sub=Button(self.fenster,text='-',width=4,height=2,foreground = "red")
        button_sub.grid(row=3,column=4,sticky=N)
        button_add=Button(self.fenster,text='+',width=4,height=2,foreground = "red")
        button_add.grid(row=4,column=4,sticky=N)
        button_vorz=Button(self.fenster,text='+/-',width=4,height=2)
        button_vorz.grid(row=4,column=2,sticky=N)
        button_com=Button(self.fenster,text=',',width=4,height=2)
        button_com.grid(row=4,column=3,sticky=N)

        button_ist=Button(self.fenster,text='=',width=3,height=2,foreground = "red")
        button_ist.grid(row=4,column=5,sticky=N)


        self.fenster.mainloop()

    #def createMenuBar(self):
     #   self.menuBar = Menu(self)
        #self["menu"] = self.menuBar

horst = rechner()
horst.eins()
BlackJack

OMG schon wieder einer der den dummen `horst` nimmt weil ihm nix einfällt. Einer der Gründe warum Klassennamen gross geschrieben werden, ist dass man keine solch dämlichen Bezeichner erfinden muss, sondern in diesem Fall dann einfach ``rechner = Rechner()`` schreiben kann.

Der Methoden-Name `eins()` ist genauso unglücklich. Der Inhalt der Methode ist auch eher was für eine `__init__()`.

Zum Problem: Man kann nicht verschiedene Layoutmanager innerhalb eines Widgets mischen. Entweder nur `pack()`, nur `grid()` oder nur `place()`. Wobei man letzteres nur in ganz seltenen Ausnahmefällen verwenden sollte. Genau wie die Vorgabe der Grösse eines Fensters in der Regel nicht nötig sein sollte.
Neueinsteiger
User
Beiträge: 4
Registriert: Sonntag 2. Dezember 2007, 14:49

Dankeschön, mal kgucken ob es klappt :wink:
Neueinsteiger
User
Beiträge: 4
Registriert: Sonntag 2. Dezember 2007, 14:49

Wo genau liegt der Unterschied zwischen pack(), grid(), Place()?und was machen die einzelnen eingaben?
BlackJack

Der "Packer" ist der einfachste Layout-Manager. `pack()` wird in Thinking in Tkinter sehr ausgiebig verwendet und erklärt.

Beim "Gridder" wird das Container-Widget in eine Art Tabelle aufgeteilt in deren Zellen man Widgets platzieren kann.

Und bei `place()` gibt man absolute Koordinaten an. Das ist aber wie gesagt ein Spezialfall, den man normalerweise nicht verwenden sollte weil die GUIs dann unter Umständen nicht mit veränderten Grössen und Texten klar kommen.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Code: Alles auswählen

self.entry1=IntVar()
entry1=Entry(fenster,width=8,textvariable=self.entry1)
entry1.place(x=50,y=50)
Ich persönlich würde diese Art vom Benennen der Variablen nicht weiteremphelen, muss ich sagen.
Einmal heißt eine lokale Variable 'entry1', und vorher wird noch ein Attribut mit dem selben Namen definiert. Python macht zwar kein Problem draus, klar, aber vorteilhaft finde ich es nicht^^

Grüße Markus :-)
Antworten