wxpythonAan de slag met wxpython


Opmerkingen

Wat is wxPython

Simpel gezegd wxPython is een set bindingen met de wxWidgets C ++ Cross Platform GUI-bibliotheek.

Ok wat is wxWidgets

De wxWidgets-bibliotheek biedt een gratis, gratis en open source, set van abstracties voor de verschillende GUI-elementen zodat de native besturingselementen nog steeds worden gebruikt, indien beschikbaar, met behoud van de native look, feel & snelheid. Als zodanig biedt het een abstractie voor het maken van GUI's en een aantal andere hulpprogramma's in een platform waarmee ontwikkelaars applicaties voor Windows, Mac OS X, Linux en andere platforms kunnen maken met behulp van een enkele codebasis. wxWidgets werd gestart in 1992 en vindt u een gedetailleerde geschiedenis te zien hier . De wxWidgets-bibliotheek wordt gedistribueerd onder de wxWindows-licentie, die is gebaseerd op de L-GPL maar met een uitzonderingsclausule . Met de uitzonderingsclausule kunt u uw toepassing dynamisch of statisch koppelen aan wxWidgets zonder dat u de bron voor uw eigen toepassing hoeft te distribueren. Met andere woorden, u kunt wxWidgets gebruiken voor gratis of commerciële projecten, zonder kosten . De licentie moedigt u aan om verbeteringen die u aanbrengt aan de wxWidgets-bibliotheek zelf terug te geven.

De hoogtepunten, merk op dat wxWidgets 100 klassen omvat voor ontwikkeling van platformoverschrijdende applicaties :

  • Vensterindeling met behulp van Sizers
  • Apparaatcontexten (samen met pennen, penselen en lettertypen)
  • Uitgebreid evenementafhandelingssysteem
  • HTML Help Viewer
  • Geluid en video afspelen
  • Ondersteuning voor Unicode en internationalisatie
  • Document / View-architectuur
  • Archiecture afdrukken
  • Sockets
  • multithreading
  • Bestands- en mapmanipulatie
  • Online en contextgevoelige hulp
  • HTML-weergave
  • Basic Containers
  • Afbeeldingen laden, opslaan, tekenen en manipuleren
  • Datum-tijdbibliotheek en timers
  • Foutafhandeling
  • Klembord en slepen en neerzetten

Merk op dat sommige van deze voorzieningen, zoals threading, niet echt GUI-gerelateerd zijn, maar een nuttige platformoverschrijdende abstractie bieden, zodat, in het geval van threading, één set applicatiecode op elk ondersteund platform werkt.

Jarenlang produceerde de wxWidgets-bibliotheek 4 afzonderlijke builds, naast builds voor foutopsporing uit één set broncode, statische en dynamische bibliotheken gebouwd voor zowel ASCII als Unicode. Het is meestal vooraf gebouwd in de meest voorkomende varianten en als broncode om te bouwen met de verschillende opties voor de doelomgeving en met de ontwikkelaars C ++ gereedschapsketen met tal van gereedschapskettingen die worden ondersteund.

De python-bindingen voor deze bibliotheek en enkele toevoegingen vormen wxPython.

Terug naar Wat is wxPython (wat geeft het mij)?

wxPython biedt een ontwikkelaar een manier om te profiteren van een cross-platform GUI-bibliotheek, met een duidelijke licentie, terwijl ook de voordelen van Python worden geboden. Net als wxWidgets en Python is wxPython gratis, gratis en open source, en beschikbaar voor gebruik en distributie in zowel gratis als commerciële projecten zonder een resulterende vereiste om uw broncode te distribueren .

  • Volledige GUI Suite inclusief, (maar niet beperkt tot):
    • Windows (inclusief MDI Windows)
    • Wizards
    • Frames & MiniFrames
    • Dialogen, Standaard, Geavanceerd en aangepast
    • Besturingselementen voor boeken, bomen, rasters en gegevensweergave
    • Meters, schuifregelaars, spinners, animaties, klembord, slepen en neerzetten
    • Ondersteuning voor HTML-, PDF- en afbeeldingsviewer
    • GUI-componenten kunnen absoluut worden gepositioneerd, maar het wordt ten zeerste aanbevolen om een op sizer gebaseerde lay-out te gebruiken die automatische formaatbepaling ondersteunt, enz.
  • Cross-platform - Ondersteuning van GUI's voor Windows, OS-X & Linux met een enkele codebasis zonder voorwaardelijke verklaringen in uw code
  • Eigen snelheid, look & feel.
  • Snel prototype, test & debug - onthoud dat dit python is
  • Run & bewerk voorbeelden van zowat alles in het demopakket.
  • Duidelijke licentie voor gratis gebruik, zelfs in commerciële producten.
  • Indien nodig kan uw python-GUI later opnieuw worden omgezet in een C ++ wxWidgets GUI omdat deze deze al gebruikt.
  • Grote, actieve en behulpzame community voor gebruikers en ontwikkelaars, zowel op StackOverflow als op mailinglijsten .

Merk op dat waar python zelf een platformoverschrijdend mechanisme biedt voor het implementeren van de utility-functies van wxWidgets, opnieuw in threading een goed voorbeeld is , het opzettelijk is weggelaten uit wxPython.

wxPython heeft ook een zeer grote reeks demonstraties die kunnen worden uitgevoerd, getest en bewerkt vanuit het Documents and Demo-pakket.

Smaken van wxPython

ASCII versus Unicode :

Jarenlang moesten ontwikkelaars, net als bij wxWidgets , kiezen tussen ASCII- en Unicode-builds en een build nodig hebben voor hun specifieke versie van python en de 32/64 bit-opties. Vanaf ongeveer wxPython 2.8.9 is de ASCII alleen build van wxPython weggelaten, zodat ondersteuning voor Unicode altijd beschikbaar is.

Klassiek versus Phoenix :

Sinds wxPython 3.0.0 bestaat er de vrijgegeven "Classic" build van wxPython en een momenteel nog niet uitgebrachte Phoenix. De klassieke build blijft vaak achter bij de wxWidgets-builds van dezelfde nummers en het documentatiepakket is de C ++ - het is beschikbaar voor download voor verschillende platforms (zie Installatie van Classic ), in het geval van Windows als een uitvoerbaar installatieprogramma. De Phoenix-bindingen, die grotendeels automatisch worden gegenereerd, zouden nauwer moeten volgen op de wxWidgets-builds en ook wxPython-specifieke documentatie moeten bevatten - het is van bron of nachtelijke builds te bouwen omdat wielen kunnen worden verkregen met pip , (zie Installatie van Phoenix ).

In wxPython maar niet wxWidgets

wxPython breidt de wxWidgets-bibliotheek uit met een aantal functies, de volgende zijn slechts enkele, die niet beschikbaar zijn in wxWidgets:

Demo Screenshots op Win10

De wxPython-demo met alle takken gesloten: voer hier de afbeeldingsbeschrijving in Een van de recente toevoegingen: voer hier de afbeeldingsbeschrijving in Een van de AGW, (Advanced Generic Widgets): voer hier de afbeeldingsbeschrijving in

Hallo Wereld

Een eenvoudige manier om een Hello World- programma te maken:

import wx
app = wx.App(redirect=False)
frame = wx.Frame(parent=None, id=wx.ID_ANY, title='Hello World')
frame.Show()
app.MainLoop()
 

Output:

Hallo wereld output

Een meer typisch voorbeeld zou zijn subklasse wx.Frame :

import wx

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Hello World')
        self.Show()

if __name__ == '__main__':
    app = wx.App(redirect=False)
    frame = MyFrame()
    app.MainLoop()
 

Dit kan ook worden herschreven om de super van Python te gebruiken:

import wx  

class MyFrame(wx.Frame):
        
    def __init__(self, *args, **kwargs):
        """Constructor"""
        super(MyFrame, self).__init__(*args, **kwargs)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame(None, title='Hello World')
    app.MainLoop()
 

Installatie van wxPython Classic

wxPython Classic is een Python 2- build van de wxPython-bibliotheek. Het genereren van de python-bindingen vereist een groot aantal handmatige interventies en de documentatie is gewoon de wxWidgets-documentatie die enkele annotaties op wxPython-mechanismen bevat, aangezien er normaal gesproken een vertraging van weken tot maanden is tussen een nieuwe release van wxWidgets en de bijpassende release van wxPython .

Ga naar de downloadpagina op de wxPython-website om te zien of er al een versie van wxPython is die u voor uw platform kunt downloaden.

De nieuwste versie van Classic is 3.0.2.0

ramen

Er zijn installatieprogramma's voor Python 2.6 en 2.7 voor 32-bits en 64-bits Windows-platforms op de website. Download gewoon een van deze en voer ze uit om het te installeren.

Opmerking: zorg ervoor dat u een wxPython-installatieprogramma downloadt voor de juiste Python die u hebt geïnstalleerd. Als u bijvoorbeeld Python 2.7 32-bits hebt, wilt u een wxPython 32-bits installatieprogramma

Mac

Als u OSX 10.5 of hoger hebt, wilt u de Cocoa- versie van wxPython downloaden en installeren. De Cocoa-versie ondersteunt ook 64-bit Mac.

Als je een Mac met een OSX-versie van minder dan 10.5 hebt, wil je de Carbon- build.

Linux

Het eerste ding om te controleren of de pakketbeheerder van uw Linux-platform (bijv. Yum, apt-get, enz.) Om te zien of het een versie van wxPython heeft die u kunt installeren. Helaas zijn veel Linux-pakketten voor wxPython voor versie 2.8.12.1 in plaats van 3.0.2.0. Als uw pakketbeheerder niet de nieuwste versie heeft, moet u deze waarschijnlijk zelf bouwen.

Er zijn build-instructies voor 3.0.2.0-Classic hier

Installatie van wxPython Phoenix

wxPython Phoenix is de nieuwste versie van wxPython (momenteel september 2016 zonder officiële release). Het ondersteunt zowel Python 2 als Python 3. U kunt hier een snapshot-build (dwz een Python-wiel) voor uw platform en Python-versie downloaden .

wxPython Phoenix maakt gebruik van een grotendeels geautomatiseerd mechanisme voor het genereren van zowel de python-bindingen voor de wxWidgets-bibliotheek als de documentatie. Phoenix wxPython-documentatie wordt specifiek voor zichzelf gegenereerd met behulp van Sphinx . Dit verhoogt de duidelijkheid in tegenstelling tot C ++ -documentatie van de klassieke build, die veel overbelastingen bevat die niet beschikbaar zijn in wxPython.

Python en pip moeten zijn geïnstalleerd voordat wxPython Phoenix kan worden geïnstalleerd.

U kunt pip gebruiken om de Phoenix-versie van wxPython te installeren. Hier is de aanbevolen methode momenteel:

python -m pip install --no-index --find-links=http://wxpython.org/Phoenix/snapshot-builds/ --trusted-host wxpython.org wxPython_Phoenix
 

Wanneer u deze opdracht gebruikt, zal pip ook wxWidgets installeren. Dit complexe pip-commando wordt waarschijnlijk 'pip install wxpython' wanneer Phoenix officieel wordt vrijgegeven.

Opmerking: wxPython Phoenix is momenteel in beta en heeft niet alle widgets die de Classic-versie heeft.

Wat is een wxPython-releasereeks?

Het wxWidgets-project heeft het releasemodel aangenomen dat wordt gebruikt door het Linux Kernel-project, waarbij er afwisselende sets releases zijn waarbij de ene set als "stabiel" wordt beschouwd en de volgende set als "ontwikkeling" wordt beschouwd. Voor wxWidgets verwijzen "stabiel" en "ontwikkeling" niet naar bugginess, maar naar de stabiliteit van de API en achterwaartse compatibiliteit.

  • Stabiel : voor de duur van de reeks worden bestaande API's niet gewijzigd, hoewel nieuwe niet-virtuele klassenmethoden en dergelijke kunnen worden toegevoegd. Binaire compatibiliteit van de C ++ bibliotheken wordt gehandhaafd door geen wijzigingen toe te staan die de grootte van het geheugen of de lay-out van de klassen en structuren wijzigen. Dit kan en legt vaak beperkingen op aan wat voor soort verbeteringen of bugfixes kunnen worden uitgevoerd in een stabiele releasereeks, maar dit heeft echt alleen invloed op de C ++ -laag omdat het achterwaarts compatibel zijn een iets andere connotatie heeft.

  • Ontwikkeling : het hoofddoel van de ontwikkelingsreeks van releases is het toevoegen van nieuwe functionaliteit of het corrigeren van problemen die niet konden worden gecorrigeerd in een stabiele reeks vanwege binaire compatibiliteitsproblemen, alles in een poging om de volgende stabiele reeks te maken. Dus voor de duur van de bestaande ontwikkelingsserie mogen de API's indien nodig worden gewijzigd of verwijderd, hoewel meestal C ++ bronniveau-compatibiliteit wordt gehandhaafd via verouderde overbelaste functies of macro's, enz. Voor wxPython betekent dit vaak dat er incompatibiliteit op bronniveau zijn omdat er geen overbelasting of macro's zijn, en om de nieuwe versie van de API te ondersteunen, moet soms de oude versie worden verwijderd.

Vanwege de binaire compatibiliteitsproblemen kan de nieuwste ontwikkelingsversie van wxWidgets / wxPython vaak minder fouten bevatten dan de nieuwste versie van de laatste stabiele releasereeks. Er is echter een afweging dat de API's kunnen veranderen of evolueren tussen versies in de ontwikkelingsreeks.

Hoe werken de versienummers?

Voor releases gebruikt wxPython een versienummer van 4 componenten. Hoewel dit veel lijkt op hoe versienummers worden gebruikt in andere Open Source-projecten, zijn er een paar subtiele verschillen. Dus voor wat release ABCD kun je het volgende afleiden:

  1. Release-serie : De eerste twee componenten van het versienummer ( AB ) vertegenwoordigen de release-serie, en als de B- component een even nummer is, is het een stabiele serie, als het een oneven nummer is, is het een ontwikkelingsrelease-serie. 2.4, 2.6 en 2.8 zijn bijvoorbeeld stabiel en de API is binnen elke serie min of meer bevroren, en 2.3, 2.5 en 2.7 zijn ontwikkeling en de API en de functionaliteit kunnen naar behoefte worden gewijzigd of ontwikkeld.

Hierdoor kunnen er vrij grote veranderingen zijn tussen de ene stabiele serie naar de andere (zeg 2.4 tot 2.6) en dit gooit vaak mensen af, omdat in andere projecten veranderingen van die magnifier de eerste component van het versienummer zouden hebben veranderd. In plaats daarvan moet je de combinatie van AB beschouwen als het belangrijkste nummer van de versie.

  1. Versienummer : het derde onderdeel van het versienummer (C) vertegenwoordigt een van de releases in een releasereeks. 2.5.0, 2.5.1, 2.5.2, 2.5.3 ... zijn bijvoorbeeld alle releases in de 2.5-releasereeks. (En omdat het in dit geval een ontwikkelingsreeks is, is de API en de functionaliteit van 2.5.3 geëvolueerd op plaatsen anders te zijn dan in 2.5.0.) De C ++ wxWidgets-releases stoppen hier meestal en alleen ABC-releases worden gemaakt.

  2. Subrelease-nummer of wxPython-release: het vierde onderdeel van het versienummer (D) wordt gebruikt om een subrelease of incrementele releases tussen de officiële wxWidgets-releases te vertegenwoordigen. Deze releases bevatten fixes voor wxWidgets-bugs die wxPython mogelijk heeft blootgelegd, of kleine verbeteringen die belangrijk zijn voor wxPython. Dit is geen willekeurige momentopname van wxWidgets, maar eerder een geteste versie van de code met fixes en verbeteringen die nog niet beschikbaar zijn via wxWidgets behalve in de broncoderepository.

Bron: https://wiki.wxpython.org/ReleaseSeries