View Single Post
Ja ser litt på GUI(graphical user interface) og generelle muligheter som finnes for python.

Det jeg skal ta litt om er wxpython
og litt om wxglade

Tkinter kommer med python.
En liten intro.
http://bildr.no/thumb/428793.jpeg

PyQt gir tilgang til rammeverket til til qtsoftware
Mange kjenner sikkert navnet Trolltech som nå skiftet navn til Qtsoftware.
Dette har lenge vært en kjent norsk firma som har utviklet software.

PyGTK mye brukt under linux.

PyWin32 gir tilgang til mange av windows sine funksjoner også GUI muligheter.

ironpython gir full tilgang til .NET bibliotekene og silverlight.
Dette gir mange muligher som og utnytte silverlight som en flash konkurent.
visual studio shell som gjør at du kan utnytte mange av mulighetene visual stuidio har med python.

jython gir deg tilgang til bibliotekene som er skrevet for java.
For og si det enkelt du skriver i python med tilgang til java sine bibliotek.

Web rammeverk.
Her har python mange bra utviklete web rammeverk.
Mest vanligeste for mange er og lære html,php,MySQL,javascript.
Man kan gjøre det samme i web rameverkene til python.
Noen av de mest kjente er Django pylons TurboGrears CheryPy WebToPy Zope
Sjekk dette ut,kansje åpner det seg en ny verden i webutvikling.

Da går vi over til wxpython,
Lager noen små eksempler i wxpython.

Kode

import random

t1 = random.randrange(6) + 1
t2 = random.randrange(6) + 1
print 'Terning 1 fikk:',t1 ,'Terning 2 fikk:',t2 ,'Total sum:',t1 + t2
Et enkelt program,problemet er mange hvordan lage en GUI framvising av koden du har lagd.
Dette kan være et vanskelig step.

Her vil vi ha en knapp som vi kan trykke på,og som viser svaret i en tekstboks.
Tenk alltid hvordan du vil at framvisningen skal være.
Bruk gjerne penn og papir og tegn ned hva du ønsker.

Kode

import wx
import random

app = wx.App()
win = wx.Frame(None, wx.ID_ANY, title="Roll a dice", size=(190, 150))
win.SetBackgroundColour("light blue")

#-|Event handling |-#
def roll(event):
    t1 = (random.randrange(12)) + 1
    filename.SetValue(str(t1))

#-| Button textbox |-#
loadButton = wx.Button(win, label='Roll', pos=(50, 5), size=(70, 25))
loadButton.Bind(wx.EVT_BUTTON,roll)
filename = wx.TextCtrl(win, pos=(60, 40), size=(50, 25))

win.Show()
app.MainLoop()
http://bildr.no/thumb/428874.jpeg

Her har skrevet med så få linjer som mulig.
En event funksjon som utfører koden.
Vanlig når man skriver i GUI så bruker man en klasse som jeg skal bruke i de neste eksemplene.

En 5min demo hvor jeg bruker wxglade.
Wxglade er GUI bygger for wxpython.
http://dump.no/files/921f2b17263c/terninger_ferdig.zip

En enkel kode som koverter temprature til farenheit.
Her vil vi ha en mulighet til og konvetere begge veier.
Vi trenger to knapper 2 tekstbokser.
Pynteter litt med noen bilder.

Kode

def temp():
    temp = input('What is your temprature: ')
    farenheit = 9.0 / 5.0 * temp + 32
    print 'The temprature is',farenheit ,'in farenheit'

temp()

Kode

import wx

class MyFrame(wx.Frame):    
    '''
    This program convert temprature -> farenheit || farenheit ->temprature
    '''    
    def __init__(self, parent, mytitle, mysize):
        wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize)
#-------------------- ********** --------------------#
         
        #----------| Window color |----------#
        self.SetBackgroundColour("#d8d8bf")
        
        #----------| Label Text |----------#                
        self.Temp_1 = wx.StaticText(self, -1, 'Farenheit', pos = (20, 100), size = (70,16 ))        
        self.Farenheit_2 = wx.StaticText(self, -1, 'Temp', pos = (27, 38), size = (70, 16))
        
        #----------| Picture_Button |----------# 
        self.bitmap_button_1 = wx.BitmapButton(self, -1, wx.Bitmap("C:\\icons\\11.png"),
                                                        pos = (25, 55), size = (32,32))
        self.bitmap_button_2 = wx.BitmapButton(self, -1, wx.Bitmap("C:\\icons\\22.png"),
                                                       pos = (25, 115), size = (32,32))
        
        #---------- bind Buttons to Events ----------#
        self.Bind(wx.EVT_BUTTON, self.te, self.bitmap_button_1)
        self.Bind(wx.EVT_BUTTON, self.fa, self.bitmap_button_2)
                      
        
        #----------| TextBox |----------# 
        self.text_ctrl_1 = wx.TextCtrl(self, -1, "",pos = (70, 120), size = (43,23))  
        self.text_ctrl_2 = wx.TextCtrl(self, -1, "",pos = (70, 61), size = (43,23))   
        
        #----------| Picture |----------# 
        self.bitmap_1 = wx.StaticBitmap(self, -1, wx.Bitmap("C:\\icons\\f.png",
                          wx.BITMAP_TYPE_ANY),pos = (115,30 ), size = (70,150))
        
        
        #----------| Event Handling |----------# 
    def te(self, event): 
        temp = self.text_ctrl_1.GetValue() 
        if temp == "" : return
        temp = round((5.0/9.0) * (float(temp) -32.0))
        self.text_ctrl_2.SetValue(str(temp))

    def fa(self, event): 
        temp = self.text_ctrl_2.GetValue()
        if temp =="" : return
        temp = float(temp) * 9.0/5.0 + 32.0
        self.text_ctrl_1.SetValue(str(temp))        
               

#----------|Set opp window and show |----------#
if __name__ == "__main__":
    app = wx.App()
    #---| Name window |---#
    mytitle = 'My window'
    #---| Size window |---#
    width = 200
    height = 220
    MyFrame(None, mytitle, (width, height)).Show()
    app.MainLoop()
http://bildr.no/thumb/428905.jpeg

Jeg har prøvd i koden og dokumentere godt hva som skjer.

temp.exe
Exe av koden + bilder som er brukt.
Exe er kun testet i xp.

Til slutt en demo av menubar og status bar,lagd event for about(gir info om koden)

Kode

import wx
import random

ID_ABOUT = 1
ID_EXIT = 2
ID_HELP = 3

class MyFrame(wx.Frame):
    def __init__(self, parent, mytitle, mysize):
        wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize)
 #-------------------- ********** --------------------#                         
        
        #----------| Window color |----------#
        self.SetBackgroundColour("light blue")  
        
        #----------| Menu bar |----------#     
        menubar = wx.MenuBar()
        self.SetMenuBar(menubar)
        self.Centre()         
        file = wx.Menu()
        help = wx.Menu()
        menubar.Append(file, '&File')
        menubar.Append(help, '&Help')
        
        #----------| Menu Append |----------# 
        #file.Append (ID_ABOUT,"&About", "information about this program")
        file.Append (ID_EXIT,  "E&xit", "Terminate the program" )                
        #help.Append(ID_HELP, "H&elp", "No help at the available")
        help.Append(ID_ABOUT,"&About", "Information about this program")
                                       
        #----------| Status Bar |----------#
        self.CreateStatusBar ()
        self.SetStatusText("Click on File")  
               
        #----------| Change Font |----------# 
        str = "Terninger Kast"
        text = wx.StaticText(self, -1, str, (65, 5))
        font = wx.Font(18, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        text.SetFont(font)
                
        #----------| Picture_Button |----------# 
        self.bitmap_button_1 = wx.BitmapButton(self, -1, wx.Bitmap("C:\\icons\\terning.png"),
                                                 pos = (400 - 290 - 15, 40), size = (87,87))
                                
        #----------| Label Text |----------# 
        wx.StaticText(self, -1, 'Resultat', pos = (140 - 20 - 5, 128), size = (70,16)) 
                
        #----------| TextBox |----------# 
        self.text_ctrl_1 = wx.TextCtrl(self, -1, "",pos = (400 - 270- 28, 145), size = (70,25))
        
                
        #-------------------- ********** --------------------#    
        #---------- bind Buttons to Events ----------#
        self.bitmap_button_1.Bind(wx.EVT_BUTTON, self.onTerning_1)  #-| Bind button to event |-#
        
        #----------| Bind info to event |----------# 
        wx.EVT_MENU (self, ID_ABOUT, self.OnAbout  )
        wx.EVT_MENU (self, ID_EXIT,  self.OnExit   )
    
    
    #----------| Event Handling |----------# 
    def onTerning_1(self, event):        
        t1 = (random.randrange(12) + 1)
        self.text_ctrl_1.SetValue(str(t1))
        
        
    def OnAbout (self,event):
        d =wx.MessageDialog (self, "A small dice simulation program \nin wxpython",   # Message dialog
                                   "About sample editor", wx.OK )
        d.ShowModal ()  # Show it
        d.Destroy ()    # close the frame    
    
    def OnExit(self,event):
        self.Close(True)        
        
        
#----------|Set opp window and show |----------#
if __name__ == "__main__":
    app = wx.App()
    #---| Name window |---#
    mytitle = 'Terning'
    #---| Size window |---#
    width = 300
    height = 250
    MyFrame(None, mytitle, (width, height)).Show()
    app.MainLoop()
http://bildr.no/thumb/428936.jpeg
terning.exe

Pygame må en ikke glemme.
Pygam gir tilgang til SDL sine glimrende biliotek.
Dette er enkel vei og komme i gang med og lage et spill.
Man kan lage virklig bra spill,visse en bruker tid på dette.

Håper det var en grei innføring i python grafiske verden.
Sikkert noe jeg har glemt som andere kan ta med.
Sist endret av snippsat; 9. juni 2009 kl. 22:09.