Gui-alapú alkalmazások a perl-en wxwidgetsekkel

A GUI-alkalmazások wxWidgets használatával kapcsolatos alapismeretek

A GUI-alkalmazások Perlre történő írása nem különbözik más dinamikus nyelvek írásától. Mindez az eredeti könyvtárak fölötti minőségi minőségtől és időszerű frissítésétől függ.

Miért wxWidgets?

A wxWidgets valóban egy cross-platform GUI eszközkészlet. Ellentétben például a Qt. amely szintén úgy tűnik, hogy több platformon működik, a wxWidget natív könyvtárakat használ az elindított platformokon, és nem próbál emulálni őket. Így az alkalmazások nem ugyanúgy néznek ki, mint a saját grafikus héjáé.

A környezet beállítása

A fejlesztéshez a GNU / Linux platformot használom. Ezért a wxWidgets telepítése az én operációs rendszeremre vonatkozik. A legegyszerűbb módja a könyvtárak telepítése az elosztási csomagokból, a Debian példáján keresztül:

Természetesen mindig telepítheted a CPAN-ot, de akkor sokat kell összeállítania, és megbotlik a verziók összeférhetetlenségének.

Első alkalmazás

A szabványos első alkalmazás egy ablak, amelyen azt mondja: "Hello, world!":

A Wx :: Frame egy átméretezhető ablak, lehet egy állapotsor, valamint egy menü. Ie ez egy általános célú ablak. A Wx :: Frame mellett van Wx :: Dialog és mások is. Vizuális elemek hozzáadásához használhatod a wxWidgets különböző osztályait és módszereit. Például egy gomb hozzáadásához, amely bezárja az alkalmazást, írja be a következő kódot:

Minden módszer, esemény stb. jól dokumentált a wxWidgets dokumentációjában. Nem fogjuk ezt részletesen foglalkozni. Tekintsük az általános megközelítést a GUI-alkalmazások írásakor.

XML-interfészgenerátorok

Egy kis alkalmazás esetében ez elég elfogadható, valamint egy egyszerű Perl parancsfájl esetén mindent egy fájlba írhat. Ez azonban nagyon kényelmetlen a nagy alkalmazásokhoz, sok ablakkal, dialógusokkal, komplex logikával.

A grafikus alkalmazásoknál ugyanazt a megközelítést kell alkalmazni, mint a webes alkalmazások esetében - az MVC-t, vagy az üzleti logika elválasztását, a leképezést és a kezelést. Ugyanezt teheti meg a GUI programmal is.

A konstrukció a felület jobban használható speciális programok generáló XML-konfigurációt (XRC-fájlokat), amelyek töltődik be az alkalmazásba, átalakítható egy grafikus felhasználói felület. Ez sokkal könnyebb fenntartani, és könnyebb megváltoztatni.

A wxWidgetsekhez hasonló ilyen generátorok vannak. A legteljesebb a wxFormBuilder. Lehetővé teszi mindenféle elem létrehozását, helyét az ablakokon stb.

Például az előző alkalmazás XRC-fájlja így néz ki:

Most töltse be ezt a konfigurációt az alkalmazásba:

Annak érdekében, hogy Wx :: Frame objektumot kapjunk. használja a LoadFrame metódust:

És annak érdekében, hogy megkapjuk a gomb objektumot, először nevünket kapjuk név szerint:

És akkor összeköti az eseményt.

Mindig érdemes minden elemet explicit módon hívni, és nem hagyni valamit, mint az m_Button_1. ez sokkal egyértelműbbé teszi a vezérlő kódot.

Elkülönítés az osztályokba

Mint minden Perl-alapú alkalmazások, a felosztás külön csomagot és osztályok egyszerűsíti a megértést a kód lehetővé teszi, hogy teszteljék az egyes osztályok és megkönnyíti a örökölni, és változtatni a viselkedését a grafikai elemekkel.

Alkalmazásunkat több összetevőre osztjuk.

A fő alkalmazási osztály

Az alap osztály feladata a beállítások betöltése, a főablak létrehozása és megjelenítése.

Főablak osztály

Ennek az osztálynak az a feladata, hogy saját ablakát konfigurálja, azaz. regisztrálja az összes eseményt, ebben az esetben kattintson a CloseButton gombra kattintva.

Indítási parancsfájl

Az app.pl start script az alkalmazás indításának kezdőpontja.

Ennek a bomlásnak köszönhetően minden osztály foglalkozik saját üzletével, és az alkalmazás szerkezete a következő:

Lehetőség van arra, hogy az egyes osztályok egyedi előtagot, például GUI-t készítsenek, hogy megkülönböztessék őket a szokásos Perl osztályoktól, amelyek az alkalmazás logikájával foglalkoznak.

Perl kód generátorok

wxFormBuilder. mint már említettük, XML reprezentációt hozhat létre, de kódot is generálhat. Sajnos a dobozon kívül nincs támogatás a Perl kód létrehozásához. Azonban a Padre fejlesztõi saját wikiprogram-generátort implementáltak a wxFormBuilder projektfájlból. Ehhez két modulra van szükség: az FBP és az FBP :: Perl. A legegyszerűbb szkript írása az osztályok létrehozásához a fájlfa kimenetét kapjuk, ahol mindegyik külön ablak:

Ráadásul ez a megközelítés abban a tényben is van, hogy nincs szükség a jelek kézi összekötésére az elemekkel. A kezelő nevének megadása a wxFormBuilderben, a PBP :: Perl helyesen generálja a megfelelő kódot. Így néz ki például a fő forma osztály:

Hogyan használhatjuk ezeket az osztályokat? Önnek nem kell funkcionalitást hozzáadnia, mert automatikusan létrejön a projektfájlból. A legmegfelelőbb megoldás az örökölni az generált osztályt, és már végrehajtani a szükséges kódot. Ezenkívül érdemes olyan osztályokat létrehozni, amelyeknek egy bizonyos előtagja van, hogy világossá tegye, mely osztályok vannak automatikusak és kézzel íródnak.

Itt van az OnClick eseménykezelő végrehajtása a gyermek osztályban:

A generált osztályokat használó projekt így néz ki:

A simple.fbp a wxFormBuilder projektfájl, és a generate.pl a generálandó parancsfájl.

A MyApp.pm modulnak manuálisan is meg kell történnie, de kódja nagyon egyszerű:

Az app.pl ugyanaz marad, mint az XML reprezentáció esetében.

A logika elkülönítése

Mint már említettük, ha írásban grafikai alkalmazások osztva megfelelő képviseletét és az alkalmazás logikáját. Ideális esetben, ha a kérelem végrehajtani oly módon, hogy a csere a különböző grafikus könyvtár, vagy egy webes alkalmazás, vagy egy konzolos verzió nem tartalmaz semmilyen, vagy Min, nem történt jelentős változás.

Ha például egy alkalmazásnak kérni kell egy adott webhelyre vonatkozó kérést bizonyos adatok lekéréséhez, érdemes egy különálló osztályba sorolni, amely nem függ a grafikus könyvtáratol. Ez megkönnyíti a tesztelést szabványos eszközökkel. Grafikus programok tesztelése esetén ez sokkal nehezebb.

Ugyanakkor a grafikus interfészek tesztelése is lehetséges és szükséges, például a szelén tesztelés és webes alkalmazások segítségével. Az X11 esetében Xnee eszközök vannak. amely lehetővé teszi a szkriptek írását, majd végrehajtását automatikus üzemmódban.

blokkoló

Ha súlyos alkalmazásokat írsz wxWidgetsre. Hamarosan találkozol azzal a ténnyel, hogy amikor az időigényes feladatokat végrehajtja, az aktív ablak blokkolódik és úgy tűnik, hogy befagy. Ez a blokkolásról szól. A kód végrehajtása során a wxWidgets várakozik, amíg befejeződik.

A probléma megoldásának szokásos módja a szálak (szálak, szálak) használata, amikor a háttérben végrehajtandó feladatokat külön szálon hajtják végre. Ebben az esetben az ablak nem blokkolódik, és a feladat befejezése után a fő ablakban válasz érkezik és feldolgozza azt.

A szálakon kívül POE típusú aszinkron keretek is használhatók. A Linux a wxGTK-t használhatja. és vele AnyEvent. Ebben az esetben egy eseményorientált kódot kell írni az utóbbi összes előnyével és hátrányával.

A wxExecute segítségével külön feladatok is elvégezhetők. de alkalmasabb harmadik féltől származó alkalmazások futtatására.

A feladatok végrehajtása külön szálon

A háttérben leggyakrabban használt feladat a szálak használata. A szálak használata a Wx segítségével. először meg kell győződni arról, hogy a perl össze van állítva a szálak támogatásával:

És másodsorban, csatlakoztassa a szálak pragmáját a Wx kapcsolathoz (ez az alkalmazásindító szkriptben is meg kell történnie):

Például, ha rákattint egy gombra, szeretnénk végrehajtani valamilyen kódot, és értesíteni az eredmény fő alkalmazását. Az ilyen alkalmazás vázlata így fog kinézni:

A megosztott címkével rendelkező változóknak meg kell adniuk az adatokat a szálak között, mivel a szálak egyidejű végrehajtása és a rendszeres változók használata nem biztonságos. A Wx fogja látni, hogy a változók megosztottnak nyilvánulnak. így biztosítva a programozót.

Ebben az alkalmazásban, ha megnyomja a gombot, az eseménykezelő regisztrálva van az eseményhez, majd létrehoz egy szálat a munka elvégzéséhez. Amikor a szál befejeződik, jelzi a fő alkalmazás eredményeit. A korábban regisztrált kezelő fő alkalmazási területe megkapja az adatokat, és végrehajt néhány műveletet az eredmény megjelenítéséhez.

A kód ilyen módon történő megjelenítésével, azaz. amikor a kódot a háttérben hajtja végre, akkor teljesen törölheti a hagyományos Perl-modulokat a grafikus könyvtártól függetlenül.

Minta alkalmazás

Például írunk egy alkalmazást, amely megkapja a legutolsó letöltött modulokat a MetaCPAN-ból és megjeleníti azokat egy listában.

Először végrehajtjuk a modellt, azaz a kérelem alapja. A mi esetünkben ez a modul kapja meg a legújabb hozzáadott terjesztéseket. Ez így néz ki:

A dokumentációban további részletek találhatók a MetaCPAN API használatával kapcsolatban. Vannak még sok példa.

kijelző

A grafikus alkalmazás egyetlen ablak, egy Fetch gombbal és egy listával. Ha egy külön menetben lévő gombra kattint, akkor hozzon létre egy objektumot a ModulesFetcher osztályból, és adja vissza az eredményt. A fő grafikus alkalmazás feldolgozza az eredményt, és kitölti a listát.

A teljes alkalmazás vázát már korábban már leírtuk, így itt csak egy példát mutatunk be egy harmadik féltől származó modul használatára:

A módszer a munka módszer az úgynevezett letölteni az objektum modellben, akkor az eredmény alakítjuk megosztott -variable, és létrehoz egy főablakra a jelátviteli eredményt.

Az elvégzett eljárás során a kapott adatokat az eseményből a GetData módszerrel keresjük, majd hozzáadjuk őket a ciklus listaobjektumához. Ezt megelőzően ne felejtse el törölni a régi adatokat.

Grafikus alkalmazások Perlre történő írása nagyon sikeres. A wxWidgets könyvtár használatával ez is egyszerű. A modell és a leképezés helyes megosztásával elérheti a hordozhatóságot a különböző grafikus könyvtárak között, valamint egyszerűsítheti a megvalósítást.

Kapcsolódó cikkek