close

PyGTK

Siirry navigointiin Siirry hakuun
PyGTK
Kuvakaappaus PyGTK-ohjelmasta
Tyyppi GUI- kehitys
Tekijä James Henstridge
Johan Dahlin
Kehittäjät Yhteisö
Sisään kirjoitettu Python , C
Käyttöjärjestelmä Linux ja muut UNIX-tyyppiset , Windows
uusin versio
Osavaltio aktiivinen
Lisenssi GNU LGPL
Verkkosivusto pygtk.org

PyGTK  on joukko Python -sidoksia GTK+ GUI -kirjastolle . PyGTK on ilmainen ohjelmisto ja sitä jaetaan GNU LGPL :n ehtojen mukaisesti . Kirjasto valittiin 100 dollarin kannettavan tietokoneen viralliseksi kehitystyökaluksi .

Versiosta 2.8 lähtien GLib -objektien kääreet on siirretty erilliseen kirjastoon - PyGObject , jonka pitäisi korvata PyGTK kokonaan GTK + -versiota 3 käytettäessä. Vaikka PyGTK on vakaa, melko kehittynyt ja yksi neljästä Pythonin pääkäyttöliittymäkirjastosta, sen kehitys tekijät pysäyttivät sen vuonna 2011 [1] , käyttäjiä rohkaistiin siirtymään PyGObjectiin [2] .

Esimerkki: Hello World -ohjelma

Tämä esimerkki koskee Python-versiota 2.x. Lisää esimerkkejä löytyy PyGTK-lähdearkistosta esimerkkikansiosta .

#!/usr/bin/env python 
#-*- koodaus: UTF-8 -*-

tuonti  gtk

def  button_clicked ( painike ): 
    tulosta  'Hei maailma!'

def  main (): 
    ikkuna  =  gtk . Ikkuna () 
    ikkuna . set_default_size ( 240 ,  180 ) 
    -ikkuna . set_title ( 'Hei maailma!' ) 
    -ikkuna . connect ( 'destroy' ,  lambda  w :  gtk . main_quit ())

    painike  =  gtk . Painike ( 'Paina minua' ) 
    -painike . connect ( 'clicked' ,  button_clicked ) 
    -painike . näytä ()

    ikkuna . Lisää ( painike ) 
    -ikkuna . läsnä ()

    gtk . tärkein ()

if  __name__  ==  '__main__' : 
    main ()
Image
Ohjelman suorituksen tulos

Jätteenkeräyksen ominaisuudet

GTK+ on toteutettu C:ssä, ja sillä on oma (ei täysin Pythoniin integroitu) viitejärjestelmä GO-objektien välillä GTK-objektien poistamiseksi, joita ei enää käytetä (eli näiden objektien käsittelemiseksi GObject-jätteenkeräysjärjestelmällä ) .

Tämän seurauksena on mahdollista, että GTK-objekteihin (eli GObject-objekteihin) tallennetuista Python-objektiviittauksista ( kuten takaisinkutsun funktioviittauksista ) tulee heikkoja viittauksia , ja Pythonin roskienkeräysjärjestelmä voi poistaa ne. [3]

Ohjelmoijan tahattoman heikkojen viitteiden muuttamisen seurauksena voi olla virheitä ohjelman suorituksen aikana, kun esimerkiksi kutsuttu Callback-toiminto alkaa toimia alustamattomilla tiedoilla (eli Python-roskankerääjän puhdistamalla tiedolla).

Viittausten muuntamista heikoiksi viittauksiksi ei tapahdu niin kauan kuin GTK-objekti kuvataan Python-ohjelmassa PyGTK-objektiksi (eli kunnes ohjelmaalgoritmi purkaa viittaukset GTK-objektia kuvaavaan Python-objektiin). GTK-objektit, jotka lisäävät itsensä muiden GTK-objektien lapsiksi, eivät kuitenkaan säilytä viittausta Python-kuvaukseensa. Ohjelmoija voi kuitenkin tehdä tämän (tallentaa GTK-objektin Python-kuvauksen) itse, kuten tehtiin esimerkiksi yllä kuvatussa esimerkkiohjelmassa Hello World [4] .

Metodologia voi myös olla toinen tapa suojautua loisilmiöitä vastaan, kun Python-funktioviittaukset muutetaan heikkoiksi viittauksiksi: kun GTK-objektit toimivat vain viittauksilla Python-funktioihin, jotka on eksplisiittisesti tallennettu Python-ohjelman piiriin (säilyttäen viittaukset itse PyGTK-objekteihin - ei ole enää tarvetta).

Katso myös

Muistiinpanot

  1. Summerfield, M. Python käytännössä: Luo parempia ohjelmia käyttämällä samanaikaisuutta, kirjastoja ja kuvioita. - Pearson Education, 2013. - S. 232. - ISBN 9780133373233 .
  2. PyGTK: GTK+ Pythonille (virallinen sivusto) . Haettu 7. kesäkuuta 2011. Arkistoitu alkuperäisestä 15. kesäkuuta 2011.
  3. Tämä ilmiö mainitaan myös ctypes-moduulin käsikirjassa, joka on suunniteltu avoimesti vuorovaikutukseen binaarisen C-koodin kanssa: ctypes - Pythonin vieras funktiokirjasto Arkistoitu 15. lokakuuta 2012 Wayback Machinessa
  4. Tässä esimerkissä: muuttujat "window" ja "button" (osoittivat GTK-objektien Python-esitystä) tallennettiin, kunnes ohjelma poistui

Kirjallisuus

  • Karvinen, K.; Karvinen, T. Merkki: Arduino-botit ja -gadgetit: kuusi sulautettua projektia avoimen lähdekoodin laitteistolla ja ohjelmistolla. - O'Reilly Media, Incorporated, 2011. - 278 s. — ISBN 9781449389710 .

Linkit