Seite 1 von 1

Brauche Hilfe beim erstellen meiner Gui...

Verfasst: Mittwoch 2. Mai 2007, 22:13
von E1sbaer
Huhu... ist irgendwie doch nen bisl schwerer den Einstieg zu finden als ich dachte... Also ich hab folgendes vor:

Eine Gui die ich unter Windows automatisch beim start des Systems öffne und die dann Windows komplett verdeckt. Also nicht nur ein maximiertes Fenster, sondern ein Vollbild.

In der Gui möchte ich 3 Knöpfe unterbringen die später mal andere Programme starten.

Die Knöpfe sollen schön aussehen (Bilder die ich anklicken kann oder so...) und in meiner Gui würd ich auch gern nen Hintergrundbild unterbringen.

Bisher bin ich soweit: (bitte nicht lachen oder schimpfen...) :oops:

Code: Alles auswählen

#File: Bruno.pyw

from Tkinter import *
import popen2,subprocess,os

class App: 
    def __init__(self,master):
        frame=Frame(master)
        frame.pack()
        self.startp1=Button(frame,text='startP1', fg='red', command=self.say_p1)
#halt mal mit roter Schrifft aber nicht mit Bild...
        self.startp1.pack(side=LEFT) 
        self.startp2=Button(frame,text='startP2',command=self.say_p2)
        self.startp2.pack(side=LEFT)
        self.startp3=Button(frame,text='startP3',command=self.say_p3)
        self.startp3.pack(side=LEFT)
    def say_p1(self):
        print 'Programm 1 wird gestartet...!'
        os.system("C:\Programme\meinProgramm1\meinprogramm1.exe")
#das geht schon ganz gut
    def say_p2(self):
        print 'Programm 2 wird gestartet...!'
        os.system("C:\Programme\meinProgramm2\meinprogramm2.exe")
    def say_p3(self):
        print 'Programm 3 wird gestartet...!'
        os.system("C:\Programme\meinProgramm3\meinprogramm3.exe")
root=Tk()
app=App(root)
root.mainloop() 

Verfasst: Donnerstag 3. Mai 2007, 10:46
von pyStyler
Hallo,
bei einem Problem kann ich dir schon helfen.

Code: Alles auswählen

#File: Bruno.pyw

from Tkinter import *
import popen2,subprocess,os

class App:
    def __init__(self,master):
        frame=Frame(master)
        frame.pack()
        self.startp1=Button(frame,text='startP1', fg='red', command=self.say_p1)
        #halt mal mit roter Schrifft aber nicht mit Bild...
        self.startp1.pack(side=LEFT)
        self.startp2=Button(frame,text='startP2',command=self.say_p2)
        self.startp2.pack(side=LEFT)
        self.startp3=Button(frame,text='startP3',command=self.say_p3)
        self.startp3.pack(side=LEFT)
    def say_p1(self):
        print 'Programm 1 wird gestartet...!'
        #~ os.system("C:\Programme\meinProgramm1\meinprogramm1.exe")
        #das geht schon ganz gut
    def say_p2(self):
        print 'Programm 2 wird gestartet...!'
        #~ os.system("C:\Programme\meinProgramm2\meinprogramm2.exe")
    def say_p3(self):
        print 'Programm 3 wird gestartet...!'
        #~ os.system("C:\Programme\meinProgramm3\meinprogramm3.exe")
        
def _main():
    root=Tk()
    root.state('zoomed')
    root.overrideredirect( 1 )
    Button(root, text='quit', command=quit).pack(side=BOTTOM) 
    app=App(root)
    root.mainloop()
    
if __name__=='__main__':
       _main()
Gruss
pyStyler

Verfasst: Donnerstag 3. Mai 2007, 12:52
von E1sbaer
Danke cool, jetzt fehlt ja eigentlich nur noch das hübsch bunte...

Hat einer ne Ahnung wie man das generell macht?

Mfg Bär

Verfasst: Freitag 4. Mai 2007, 14:54
von schlangenbeschwörer
Hi!
Fast alle Widgets haben eigentlich das image-Argument mit dem du ihnen ein Objekt vom Typ PhotoImage übergeben kannst. Dh. je nach dem, wie du die Buttons platzieren willst, bzw. ob du sonst noch was machen willst, nimmst du einfach ein dein Frame, übergibst ihm das Hintergrundbild und positionierst die Buttons, denen du auf die gleiche Art ein Bild Übergibst.
Evtl. setzt du bei den Buttons 'relief' noch auf "flat", dann müsste mann nur noch deine Bilder sehen.

Wenn du alles ganz genau positionieren willst, nimm den place-Layout-Manager, oder nimm statt des Frames ein Canvas. Da kannst du andere Widgets mit 'create_window' reinbauen, alles pixelgenau positionieren und zudem noch selbst was zeichnen.

Gruß, jj

Verfasst: Sonntag 13. Mai 2007, 20:23
von E1sbaer
Ich versteht es einfach nicht. Ich hab nen Button der auch die größe des gifs einnimmt, aber das gif seh ich einfach nicht.

Mit dem Hintergrund verzweifel ich total... Der code sieht derzeit so aus:

Code: Alles auswählen

#File: Brunov01.pyw 

from Tkinter import * 
import os

class App:
    def __init__(self,master):
        #self.fenster = Tk()
        #gif = PhotoImage(file='E:/bruno/hintergr.gif')
        #self.bild = Label (self.fenster, width='5c', height = '3c', image = gif)
        #self.bild.pack()

        frame=Frame(master)
        frame.pack()

        icon=PhotoImage(file="bilder\DerOBaer.gif")
        #Button(self.fenster, image=icon,
        #       command=self.say_p3).pack()

        Button(image=icon).pack()
        
        self.startp1=Button(frame,image=icon, command=self.say_p1) 
        self.startp1.pack(side=LEFT) 
        self.startp2=Button(frame,text='startP2',command=self.say_p2) 
        self.startp2.pack(side=LEFT) 
        self.startp3=Button(frame,text='startP3',command=self.say_p3) 
        self.startp3.pack(side=LEFT)

    def say_p1(self): 
        print 'Programm 1 wird gestartet...!' 
        os.system("Start /max ZDF-Idealburg\start.exe") 
    def say_p2(self): 
        print 'Programm 2 wird gestartet...!' 
        os.system("Start /max ZDF-Ritter\start.exe") 
    def say_p3(self): 
        print 'Programm 3 wird gestartet...!' 
        os.system("Start /max Mittelalter\start.exe") 

       
root=Tk() 
root.state('zoomed') 
root.overrideredirect( 1 )
app=App(root) 
root.mainloop() 

Verfasst: Sonntag 13. Mai 2007, 20:48
von BlackJack
Bei `Tkinter` muss man aufpassen, dass Grafiken auf der Python-Seite referenziert bleiben. Binde das `icon` mal an das `App`-Objekt, sonst wird der Speicher für die Grafik wieder freigegeben, wenn die `__init__()`-Methode abgearbeitet wurde.

Verfasst: Montag 14. Mai 2007, 23:29
von E1sbaer
Bin jetzt fast fertig dank eurer Hilfe, mir fehlt aber noch ein Tipp zum finalen Abschluss. Wie bekomm ich ein Fenster hin, dass mein Hintergrundbild zeigt und an dem ich meine 3 Knöpfe an von mir bestimmte Positionen setzen kann.

Hier der aktuelle Code der leider nicht wirklich taugt...

Code: Alles auswählen

#File: Brunov01.pyw 

from Tkinter import * 
import os

class App:
    def __init__(self,master):
        self.fenster = Tk(master)
        self.hintergru = PhotoImage(file="bilder\hintergr.gif")
        self.bild = Label(self.fenster,width='10c',height='10c',image = self.hintergru)
        self.bild.pack()

        #frame=Frame(master)
        #frame.pack()

        self.icon1=PhotoImage(file="bilder\DerOBaer.gif")
        self.startp1=Button(self.bild,image=self.icon1,text='startP2',command=self.say_p1) 
        self.startp1.pack(side=LEFT)
        
        self.icon2=PhotoImage(file="bilder\DerOBaer.gif")
        self.startp2=Button(self.bild,image=self.icon2,text='startP2',command=self.say_p2) 
        self.startp2.pack(side=LEFT)
        
        self.icon3=PhotoImage(file="bilder\DerOBaer.gif")
        self.startp3=Button(self.bild,image=self.icon3,text='startP3',command=self.say_p3) 
        self.startp3.pack(side=LEFT)

    def say_p1(self): 
        print 'Programm 1 wird gestartet...!' 
        os.system("Start /max ZDF-Idealburg\start.exe") 
    def say_p2(self): 
        print 'Programm 2 wird gestartet...!' 
        os.system("Start /max ZDF-Ritter\start.exe") 
    def say_p3(self): 
        print 'Programm 3 wird gestartet...!' 
        os.system("Start /max Mittelalter\start.exe") 

       
root=Tk()
root.state('zoomed') 
root.overrideredirect( 1 )
app=App(root) 
root.mainloop() 

Verfasst: Dienstag 15. Mai 2007, 17:03
von schlangenbeschwörer
schlangenbeschwörer hat geschrieben:Hi!

Wenn du alles ganz genau positionieren willst, nimm den place-Layout-Manager, oder nimm statt des Frames ein Canvas. Da kannst du andere Widgets mit 'create_window' reinbauen, alles pixelgenau positionieren und zudem noch selbst was zeichnen.

Gruß, jj
:wink:

PS: Tk(master) geht nicht.

Verfasst: Dienstag 22. Mai 2007, 18:02
von E1sbaer
Mein Programm ist inzwischen echt hübsch geworden, nicht zuletzt durch eure Hilfe und dann noch noch mal ein python Buch aus der Uni-Bib.

Um vielleicht dem ein oder anderen der auf ähnlichen Suchen ist wie ich es war zu helfen,hier auch meine vorerst letzte Version meines Programmes.

Code: Alles auswählen

#File: Brunov.pyw 

from Tkinter import * 
import os

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

        self.fenster = Tk()

        self.canvas = Canvas(self.fenster, width=1024, height=768)
        self.hintergrund = PhotoImage(file="bilder\Back1.gif")
        self.canvas.create_image(0, 0, image=self.hintergrund, anchor=NW)
        self.canvas.pack()

        self.__initButton1()
        self.__initText1()
        self.__initButton2()
        self.__initText2()
        self.__initButton3()
        self.__initText3()
        self.fenster.state('zoomed')#Programm wird maximiert ausgefuehrt
        self.fenster.overrideredirect(1)#Programm wird ohne Fensterraender ausgefuehrt
        self.fenster.mainloop()
        
    def say_p1(self): 
        print 'Programm 1 wird gestartet...!' 
        os.system("Start /max ZDF-Idealburg\start.exe") 
    def say_p2(self): 
        print 'Programm 2 wird gestartet...!' 
        os.system("Start /max ZDF-Ritter\start.exe") 
    def say_p3(self): 
        print 'Programm 3 wird gestartet...!' 
        os.system("Start /max Mittelalter\start.exe")
        
    def __initButton1(self):        
        self.icon1=PhotoImage(file="bilder\Burg.gif")
        self.startp1=Button(image=self.icon1,width='2c',height='2c',command=self.say_p1)
        self.canvas.create_window('7c','17c',window=self.startp1)
    def __initText1(self):
        self.canvas.create_text('5.8c','19c',text='Burgen',font=('Comic Sans MS', 20),fill='white',anchor=W)

    def __initButton2(self):        
        self.icon2=PhotoImage(file="bilder\Ritter.gif")
        self.startp2=Button(image=self.icon2,width='2c',height='2c',command=self.say_p2) 
        self.canvas.create_window('14c','17c',window=self.startp2)
    def __initText2(self):
        self.canvas.create_text('12.9c','19c',text='Ritter',font=('Comic Sans MS', 20),fill='white',anchor=W)

    def __initButton3(self):        
        self.icon3=PhotoImage(file="bilder\Mittelalter.gif")
        self.startp3=Button(image=self.icon3,width='2c',height='2c',command=self.say_p1)
        self.canvas.create_window('21c','17c',window=self.startp3)

    def __initText3(self):
        self.canvas.create_text('19.1c','19c',text='Mittelalter',font=('Comic Sans MS', 20),fill='white',anchor=W)
        
app=App()
Zusehen ist, nach dem ausführen des Codes ein Hintergrundbild im Vollbild ohne Fenster. Zusätzlich sind 3 Buttons / Knöpfe unter gebracht die jeweils ein Bild zeigen. Da man nur entweder Text oder Bild anzeigen kann habe ich zusätzlich jeweils eine Beschreibung darunter eingefügt.

Dieses Programm hat keinen Beenden-Knopf, da dies verhindern soll das Kinder die die Oberfläche bedienen sollen nicht an das Windowssystem kommen und irgend etwas umstellen können. Die ganze Bedienung soll nur über eine Maus bereitgestellt werden.

Ich werde nun noch versuchen für eine angenehmere Wartung eine Abfrage ein zubauen das beim Drücken der Esc-Taste das Programm beendet wird. Mal sehen ob ich das auch noch schaffe.

Liebe Grüße
und noch mal vielen lieben Dank an alle Helfer

Eisbär