PyGTK
| PyGTK | |
|---|---|
| |
| 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 ()
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
- ↑ 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 .
- ↑ PyGTK: GTK+ Pythonille (virallinen sivusto) . Haettu 7. kesäkuuta 2011. Arkistoitu alkuperäisestä 15. kesäkuuta 2011.
- ↑ 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
- ↑ 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 .
