Seite 1 von 1

GUI eines Taschenrechner

Verfasst: Sonntag 2. Dezember 2007, 14:53
von Neueinsteiger
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

Verfasst: Sonntag 2. Dezember 2007, 15:02
von sorgenlos
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)

Verfasst: Sonntag 2. Dezember 2007, 15:16
von pyStyler
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

Verfasst: Sonntag 2. Dezember 2007, 15:16
von Neueinsteiger
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()

Verfasst: Sonntag 2. Dezember 2007, 15:33
von 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.

Verfasst: Sonntag 2. Dezember 2007, 15:33
von Neueinsteiger
Dankeschön, mal kgucken ob es klappt :wink:

Verfasst: Sonntag 2. Dezember 2007, 15:44
von Neueinsteiger
Wo genau liegt der Unterschied zwischen pack(), grid(), Place()?und was machen die einzelnen eingaben?

Verfasst: Sonntag 2. Dezember 2007, 16:43
von 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.

Verfasst: Sonntag 6. Januar 2008, 22:21
von Markus12

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 :-)