Lucrul cu mono partea 4

Pe scurt despre Glade and Glade #

Glade este un designer de interfață cu utilizatorul care lucrează cu biblioteca inter-platformă a elementelor de interfață Gtk din spațiul de lucru GNOME, care vă permite să separați vizualizarea externă a programului de logica sa de operare. De fapt, Glade este o aplicație freeware pentru crearea vizuală a interfețelor grafice bazate pe biblioteca GTK + cross-platform. Dar Glade # este un set de linkuri cu libglade în C #, adică o bibliotecă din pachetul C # pentru crearea unei interfețe de utilizator.







Înainte de crearea Glade, dezvoltarea interfeței cu utilizatorul a fost extrem de incomodă și de consumatoare de timp. Întreaga interfață a fost descrisă direct în C ++ și înainte ca programul să fie compilat și lansat, programatorul nu a putut vedea cum arată această interfață pe ecran. Poiana a permis transferul dezvoltării interfeței la un nivel vizual mai bun.

Ulterior, au apărut instrumente care folosesc instrumentele vizuale de programare pentru a construi o interfață fără a folosi Glade (de exemplu, Stetic, care face parte din mediul MonoDevelop). Cu toate acestea, Glade are un avantaj semnificativ. Descrierea interfeței dezvoltate în Glade este separată de codul sursă al programului și este un document separat XML. Acest lucru face posibilă, de exemplu, crearea a mai multe variante ale interfeței, astfel încât utilizatorul să poată folosi cele mai convenabile pentru el.

Descrierea interfeței create de Glade în format XML și codul sursă al programului sunt legate împreună utilizând funcțiile librăriei libglade sau ale funcțiilor GtkBuilder care fac parte din biblioteca de obiecte GTK +. Adică, Glade vă permite să descrieți interfața în două formate diferite - libglade (toate versiunile de Glade) și GtkBuilder (începând cu versiunea Glade 3). Este clar că pentru a lucra cu descrierea interfeței în formatul libglade este necesar să aveți aceeași bibliotecă de nume în sistem. În cele mai recente versiuni ale bibliotecii GTK +, au fost introduse obiecte speciale care vă permit să descărcați fișiere în format GtkBuilder fără a instala alte biblioteci suplimentare. Această "simplificare" a transformat formatul libglade într-unul învechit, deci acum este recomandat ca creatorii de interfețe să dea preferință formatelor GtkBuilder.

În mediul Mono pentru lucrul cu Glade-fișiere, puteți utiliza instrumente GTK # (pentru utilizarea cu GtkBuilder) sau înveliș special“» Glade # libglade pentru bibliotecă (un set de link-uri pentru a lucra cu formate de bibliotecă libglade în C #).

În sistemul de operare Ubuntu, instalarea se poate face din centrul de aplicații Ubuntu din secțiunea "Instrumente pentru dezvoltatori -> Dezvoltarea interfețelor grafice".

Lucrul cu mono partea 4

În cazul în care centrul de aplicații nu este disponibil (de exemplu, nu sunt instalate, sau de a folosi o versiune mai veche de Ubuntu), puteți instala cele mai recente disponibile în depozitul, versiunea Glade cu comanda apt-get:

Cei care doresc să obțină cea mai recentă versiune a Glade, pot să o descarce de pe site-ul proiectului.

Dacă încă intenționați să utilizați fișierele libglade, asigurați-vă că sunt instalate ansamblurile clare:

Dezvoltarea interfeței cu Glade

Înainte de a crea orice interfață, trebuie să vă gândiți la specificațiile sale și apoi să construiți un arbore de widget-uri.

Pentru simplitate (și, de asemenea, pentru a compara diferite abordări pentru crearea unei interfețe), vom folosi fereastra din articolul precedent dedicat GTK #.

Interfața programului pentru găsirea rădăcinilor ecuațiilor

Lucrul cu mono partea 4

Să împrumutăm din acest exemplu ierarhia widget-urilor de pe fereastră.

Widget ierarhia pentru interfața noastră

Lucrul cu mono partea 4

După ce conceptul de interfață a fost elaborat, vom începe să-l construim folosind Glade. Imediat după lansarea Glade, apare fereastra Properties (Proprietăți), unde puteți selecta setările de proiect necesare. Să le analizăm mai detaliat.

Parametrii proiectului

Proiect fereastră proprietăți

Lucrul cu mono partea 4

Formatul "Formatul fișierului proiectului" vă permite să selectați tipul de fișier cu descrierea interfeței care va fi generat (GtkBuilder sau libglade).

Secțiunea "Numele obiectelor sunt unice" vă permite să specificați stilul de verificare a unicității denumirilor de obiecte. Dacă comutatorul este setat la "în cadrul proiectului", atunci numele de obiecte din întregul proiect nu pot fi identice. Dacă comutatorul este setat la "pentru fiecare fereastră", vor fi verificate numai unicitatea numelor de obiecte din fereastră, numele pot fi repetate în diferite ferestre ale aceluiași proiect.

Secțiunea "Imagini încărcate" îi spune lui Glade unde să obțină fișiere imagine, dacă acestea sunt necesare de widget-uri. Acesta poate fi un director de proiect, un director specificat în raport cu directorul proiectului sau un director situat în calea absolută.

Secțiunea "Versiunea necesară a bibliotecilor" vă permite să alegeți pentru ce versiune de Gtk + va fi creată interfața, adică executați aplicația pe care o creați. Optimal pentru a alege cea mai recentă versiune, totuși, dacă doriți ca aplicația să funcționeze pe versiuni mai vechi, trebuie să specificați cea mai mică versiune acceptată pe platformele dvs.

Când faceți clic pe butonul "Executare" din secțiunea "Verificați versiunile și găsiți widget-urile depășite", interfața încorporată este bifată. Pe baza rezultatelor sale, se afișează un mesaj. Dacă nu se găsesc erori, aceasta înseamnă că toate widgeturile folosite în proiect sunt relevante pentru versiunea specificată GTK +:

Lucrul cu mono partea 4

În cazul în care proiectul conține widget-uri versiune neadmis (de exemplu, se deschide descrierea interfață este creată pentru versiunea GTK + 2.16, iar versiunea de GTK + 2.12 este specificat în setările de proiect), veți vedea un mesaj de faptul că autentificarea nu reușește, și o listă a erorilor constatate:

Lucrul cu mono partea 4

Creați o interfață

Următorul pas este să creați un nou șablon de fereastră și să îl numiți "MainWindow". Pentru a face acest lucru, setați parametri, cum ar fi titlul ferestrei ( „Calculul rădăcinilor“), poziția ferestrei (atunci când rulează poziția, selectați „Center“), lățimea și înălțimea ferestrei la pornire.







Lucrul cu mono partea 4

Apoi, utilizând fila "De bază", setați dimensiunea marginii ferestrei la 6 pixeli.

Lucrul cu mono partea 4

Pentru semnalul de control al ferestrei de procesare pe tab-ul „semnale“ adăugați distruge procesorul de semnal (aktivirutsya caseta de distrugere) obiect GtkObject părinte și atribuiți-l on_MainWindow_destroy handler (randament din aplicații).

Lucrul cu mono partea 4

Despre fila "Semnale" și semnalele în principiu, trebuie să spuneți ceva mai mult.

Datele care sunt utilizate în această filă sunt organizate sub formă de mai multe coloane.

Coloana "Semnale" enumeră semnalele widgetului selectat, grupate în funcție de ierarhia obiectelor părinte. Coloana "Handler" este inițial umplută cu numele funcției, care trebuie apelată când semnalul este activat. Trebuie remarcat faptul că de îndată ce adăugăm un handler, va exista încă o linie pentru acest semnal:

Prezența acestei linii vă permite să adăugați încă un handler pentru semnal. Astfel, puteți adăuga mai mulți manipulatori pentru un semnal, care va fi numit secvențial.

Coloana "Date de utilizator" poate conține numele obiectului definit în fișierul Glade, care va fi transmis către manipulant.

Coloana "După" conține o casetă de selectare. Dacă această casetă de selectare este selectată, dispozitivul de tratare specificat va fi apelat după procedura de tratare prestabilită.

În cele mai multe cazuri, nu se utilizează coloanele "Date utilizator" și "După".

Să revenim la dezvoltarea interfeței. Ghidat de arborele widget, obținut prin proiectarea interfeței, adăugați un VBox cu trei linii. În prima linie se adaugă Frame, în interiorul căreia se plasează HBox cu două coloane și în fiecare dintre coloane se plasează RadioButton. De asemenea, nu uitați să scrieți în proprietățile textelor pentru etichete. În acest moment, interfața arată astfel:

Lucrul cu mono partea 4

După cum puteți vedea, ambele comutatoare sunt setate ca active. Acest lucru nu este adevărat, deoarece trebuie să fie dependenți unul de celălalt. Pentru a corecta situația, trebuie să faceți clic pe butonul "radiobutton2". "Pe partea proprietății" Grupului ". În fereastra care se deschide, am pus punctul (setați pavilionul) la stânga radiobutton1, care va spune că radiobutton2 aparține aceluiași grup ca radiobutton1.

Lucrul cu mono partea 4

Trebuie remarcat faptul că pentru radiobutton1 o astfel de operațiune nu este necesară, mai mult, este o greșeală. Algoritmul de lucru este că radiobutton1 este inițial creat și radiobutton2 este atașat la acesta. Acum, întrerupătoarele au devenit dependente:

Lucrul cu mono partea 4

În urma copacului widget-urilor, adăugați celelalte widget-uri ale ferestrei. În final, ar trebui să obțineți următoarea versiune a interfeței:

Lucrul cu mono partea 4

Adăugați sfaturile finale la interfața noastră. La începutul câmpului de intrare pentru coeficientul C trebuie să fie inactiv, pentru că inițial am activat comutator pentru o ecuație liniară, care nu factorul C. Pentru a satisface aceasta nevoie de un usolovie câmp entry3 schimba proprietatea General -> Sensibil la „Da“ la „Nu“ .

În cele din urmă, adăugați agenți de procesare a semnalului

  1. Pentru radiobutton1, setați dispozitivul de tratare a semnalului în grupul GtkToggleButton. Numele handlerului on_radiobutton1_toggled.
  2. Pentru radiobutton2, setați dispozitivul de tratare a semnalului în grupul GtkToggleButton. Numele handlerului on_radiobutton2_toggled.
  3. Pentru butonul de buton1 (Calculați), setați dispozitivul de procesare a semnalului clic în grupul GtkButton. Numele handlerului on_button1_clicked.
  4. Pentru butonul 2 (Ieșire), setați dispozitivul de procesare a semnalului clicat în grupul GtkButton. Numele handlerului on_button2_clicked.

Pentru a lua în considerare cele două opțiuni folosind o interfață (folosind Glade # și folosind GtkBuilder) salvați fișierul în două formate: Glade - numit GladeUI.glade si GtkBuilder - cum GtkBuilderUI.glade.

Descărcați fișiere Glade în aplicație (libglade format)

Creați un fișier GladeTest.cs cu următorul conținut:

Să acordăm atenție punctelor cheie din următoarele rânduri:

Această linie încarcă interfața dintr-un fișier XML Glade. Primul parametru specifică numele fișierului cu descrierea interfeței, iar al doilea specifică numele ferestrei principale descărcate din fișier. Faptul este că mai multe ferestre de nivel superior pot fi plasate în fișierul Glade XML. Rețineți că numele widgetului trebuie să fie întotdeauna același atât în ​​descrierea interfeței, cât și în al doilea parametru. Al treilea parametru este responsabil de internaționalizare și până acum nu ne interesează.

Această comandă adaugă automat semnalelor de manipulare. Pentru a funcționa corect în codul programului, trebuie să utilizați metode de procesare a semnalelor, ale căror nume coincid cu numele operatorilor din descrierea interfeței XML.

Utilizând metoda GetWidget, puteți obține obiectul widget după numele său. Acest lucru este necesar pentru a apela metodele de procesare pentru acest widget. În special, pentru a afișa o fereastră, puteți apela metoda Show în ea.

Există un alt mod de a obține widget-uri după numele lor, folosind atributul Glade.Widget:

Numele de widget este trecut ca parametru atribut.

Acum, folosind informațiile obținute din acest articol și din articolul anterior, realizăm funcționalitatea găsirii rădăcinilor ecuațiilor. Codul complet al programului este dat în fișierul GladeTest.cs.

Cererea de pornire a aplicației

Lucrul cu mono partea 4

Singurul dezavantaj al aplicației care rezultă este că funcționează numai cu fișierul XML corespunzător, adică împreună cu fișierul GladeTest.exe, fișierul GladeUI.glade cu descrierea interfeței trebuie distribuit. Dacă fișierul XML este pierdut, programul nu va funcționa.

Pentru a preveni acest lucru, puteți încorpora fișierul XML în resurse de asamblare. Pentru a face acest lucru, trebuie să instruiți compilatorul să plaseze XML în interiorul ansamblului ca una dintre resurse:

Dar, înainte de compilare, trebuie să schimbați o linie în codul sursă:

Aceasta spune aplicației că documentul trebuie încărcat din resursele de asamblare.

Descărcați fișiere Glade în aplicație (format GtkBuilder)

Din păcate, suportul normal pentru GtkBuilder în versiunea stabilă a GTK # (în momentul în care este 2.12.10) nu este. Dezvoltatorii au decis să nu lanseze versiunea 2.14, ci să se concentreze pe lansarea mai mare a GTK # 3.0. Cu toate acestea, există clădiri de versiunea 2.14.x pe care le puteți utiliza pentru a lucra (trebuie doar să vă amintiți că acestea sunt instabile).

Pentru a putea lucra cu formatul GtkBuilder, trebuie să instalați bibliotecile grafice gtk-bean developed by Stephane Delcroix. În Maverik Meerkat (Ubuntu 10.10), bibliotecile necesare vor fi cel mai probabil parte a unuia dintre depozitele obișnuite. Pentru versiunile mai vechi, trebuie să utilizați repositorele terților:

Și apoi instalați cele două pachete:

Căutările lungi pentru orice documentație inteligibilă pentru fasolele de la gtk nu au dus la nimic, așa că a trebuit să mă refer la codul sursă. Cei care doresc să afle mai multe despre bibliotecă pot lua codul aici.

Să vedem ce modificări vor fi necesare dacă utilizați fișierul format GtkBuilder pentru a inițializa interfața. Ca bază, luați deja codul sursă GladeTest.cs și salvați-l ca GtkBuilderTest.cs.

În cel mai simplu caz, trebuie să înlocuiți toate obiectele de pe Glade.XML GtkBeans.Builder toate atributele [Glade.Widget] pe [GtkBeans.Builder.Object].

Mai jos este o secțiune a codului sursă care a fost reproiectat:

Rețineți că, atunci când compilarea nu are nici un sens pentru a specifica parametrul -pkg: Glade-ascuțite-2.0, deoarece Gtk.Builder incluse în GTK-ascuțite și trebuie să adăugați numai -pkg de asamblare: GTK-ascuțite-beans2.0. Fișier XML inclus în resurse:

Biblioteca implicită GTK-ascuțite-fasole nu pot fi plasate în GAC, deci înainte de a începe aveți nevoie să adăugați un director pentru a le într-un mediu MONO_PATH variabil:

Acum puteți rula aplicația:

GtkBuilder vs. Glade #

În sfârșit, să analizăm o metodă destul de interesantă implementată în GtkBuilder, care arată avantajul incontestabil al GtkBuilder în fața lui Glade #. Aceasta este metoda GetRawObject, care vă permite să creați widget-uri descărcate dintr-un fișier XML, dar care să le permită să lucreze direct cu obiecte GTK #.

Să ne schimbăm exemplul și să îl salvăm ca GtkBuilderTest_RawData.cs.

Toate metodele, cu excepția Main, sunt incluse în clasa MainWindow imbricate, moștenite de la Gtk.Window și obțin obiectul de la Builder în acesta:

Manipulatoarele de evenimente vor fi adăugate și în clasa MainWindow. Singurul lucru care trebuie rezolvat este acela de a schimba parametrul main_wnd în noile constructe MessageDialog la acest parametru.

Funcția principală se va schimba după cum urmează:

concluzie

În prezent, tehnologia Glade # este cea mai potrivită pentru construirea unei interfețe utilizând instrumentele GTK #. Deși este considerat învechit, faptul că nu există o implementare stabilă a lui GtkBuilder îl face să o folosească.

Cu toate acestea, sperăm că eliberarea de GTK # 3 doar în jurul valorii de colț, și în curând, pentru a profita de puterea de GtkBuilder, nu trebuie să instalați biblioteci terță parte instabilă.

Tehnologiile Glade # și GtkBuilder permit în sine crearea de interfețe utilizator diferite pentru aceeași aplicație, în funcție de dorințele diferite ale utilizatorilor diferiți.







Articole similare

Trimiteți-le prietenilor: