Har du liksom jag gått och trott att det är väldigt svårt att skapa grafiska användargränssnitt (förkortas ofta GUI) – det vill säga fönster, menyer, knappar, dialogrutor etc? Well, det är en sanning med modifikation. Har du liksom jag läst hela böcker – riktiga tegelstenar – om programmering som inte med en enda rad berör hur man skapar ett GUI, just med hänvisning till att det är för komplicerat? Well, det är rätt och slätt dumt att sådana böcker skrivs.

Det finns nämligen flera ramverk, eller verktygslådor om man så vill, för GUI-programmering. De fungerar på samma sätt som Gosu, det bibliotek som i det här inlägget användes för att göra ett mycket simpelt 2D-spel: de ger tillgång till en rad färdiga klasser och metoder. Om dessa ramverk används tillsammans med exempelvis Ruby behöver det inte alls vara särskilt svårt att skapa ett GUI. Vilket strax ska bevisas.

Jag har tänkt demonstrera ett ramverk som heter Qt (några andra exempel är Fox, GTK och Tk). Förvänta dig ingen djupdykning, utan det handlar om en kort och ytlig introduktion. För att programexemplen ska funka på din egen dator måste du först och främst ha installerat Ruby, något du kan läsa mer om här. Dessutom måste du ha installerat qtbindings som gör det möjligt att använda Qt via Ruby. Det gör du enkelt genom att vid kommandoprompten skriva gem install qtbindings.

Sedan är det bara att öppna texteditorn, skriva in koden nedan och spara den som exempelvis ”qt_test.rb”.

require 'Qt'

app = Qt::Application.new(ARGV)

box = Qt::MessageBox.new
box.setText("Hejsan världen! Qt här!")
box.show

app.exec

Den första raden i programmet ger oss tillgång till verktygen i Qt-lådan. Den andra raden skapar ett nytt objekt, en instans av klassen Qt::Application. Denna klass är själva grunden för alla Qt-applikationer, och för att en Qt-app ska funka måste det finnas ett – och endast ett – objekt av detta slag i programmet. De tre raderna som börjar med ”box” skapar en instans av Qt:MessageBox som är en färdig klass för dialogrutor, anger vilken text som ska visas i rutan och ser till så att den visas på skärmen. I sista raden exekveras Qt-appen. Om du nu kör programmet, genom att skriva ruby qt_test.rb vid kommandoprompten, bör du få följande resultat:

qt_test

Imponerad? Inte? Nå, det finns färdiga klasser i Qt som har betydligt mer avancerad funktionalitet än Qt:MessageBox. Här kommer ett lite mer färgstarkt exempel. Ändra programmet enligt nedan och provkör igen.

require 'Qt'

app = Qt::Application.new(ARGV)

box = Qt::ColorDialog.new
box.show

app.exec

Lite häftigare, inte sant?

Nu har vi bara skrapat lite på ytan när det gäller möjligheterna med Ruby + Qt. Och jag tänker i detta inlägg inte göra mer än så.

För fördjupade studier rekommenderas i stället den tutorial, webbkurs, som ligger här, och som jag själv tänker ägna mig åt de närmaste dagarna. Om du kan tänka dig att använda ett annat ramverk så kan jag återigen rekommendera boken Programmering i Ruby, som i ett helt kapitel behandlar GUI-programmering med Fox-biblioteket. Ha så kul!

/Mats

Annonser