pillinetwork hesabınızla giriş yapın.

Matlab Grafik Arayüz oluşturma

Kullanıcı arayüzü, programın kullanıcısı tarafından daha etkili ve daha kolay kullanılmasını sağlar. Bir çok yazılımda “kullanıcı dostu arayüz”, “kullanımı kolay arayüz” ifadeleri programın artısı olarak belirtilir. MATLAB kullanıcılarının çoğunluğunu asıl iş alanı programcılık olmayan disiplinlerden insanlar oluşturur. Makine Mühendisliği, Elektrik Elektronik Mühendisliği, Havacılık ve Uzay Mühendisliği, Biyomedikal Mühendisliği gibi. MATLAB da yazılan fonksiyonların kolay kullanımı için arayüz tasarımı, bu disiplinlerden kişilere zaman zaman zor gelebilir. Bu yazının ilk kısmında bu kişilere MATLAB da kullanıcı arayüzü tasarımı ile ilgili temel bilgiler verilmeye çalışılacaktır. Devamında örnek tasarımlarla sık karşılaşılan sıkıntılara çözüm önerileri sunulacaktır. Bu yazı MATLAB 7.6.0 versiyonu kullanılarak hazırlanmıştır. Anlatımıma başlamadan önce bir noktanın altını çizmek istiyorum; bu yazı MATLAB GUI yardım dokümanı ya da MATLAB GUI nin bütün özelliklerinin anlatıldığı bir yazı değil, geliştirdiğiniz programlara kullanıcı arayüz yapmak istediğinizde kullanabileceğiniz temel konuları anlatacaktır.
MATLAB da Kullanıcı Arayüzü Nasıl Çalışır?
Kullanıcı arayüzü kullanıcısına üzerinde pushbutton, textbox, menu, listbox gibi kontrol birimlerinin bulunduğu bir ortam sağlar. Örneğin bir pushbutton a basıldığında daha önceden yazılmış bir fonksiyonun çalışması sağlanabilir, ya da veri tabanında sakladığınız verilerin arayüzü açtığınızda listbox ta görüntülenmesini sağlayabilirsiniz.
Anlatmaya başlarken, kullanıcı arayüzü tasarımını yapacağınız MATLAB GUI programını nasıl açacağınızdan bahsedeyim aşağıdaki şekildeki gibi GUI yi çalıştırabilirsiniz.

GUI-1
GUI-1

MATLAB Command Window da guide yazdığınızda da aynı şeyi yapmış olursunuz, size kalmış.
GUI çalıştığında aşağıdaki figürü göreceksiniz. Bu figürde iki tab vardır bunlardan biri MATLAB ın size sunduğu şablonlar ve boş GUI açabileceğiniz "Create New GUI" tabı, diğeri ise "Open existing GUI" tabıdır. Open Existing GUI tabını seçtiğinizde daha önceden hazırladığınız tüm GUI ler görüntülenir. (Current Directory ne olursa olsun hepsi!)
GUI-2
GUI-2

Boş bir GUI yaratarak herşeyi en baştan kendimiz yapmaya çalışalım, böylesi öğrenmek için daha iyi olacaktır diye düşünüyorum.
Ekranda aşağıdaki gibi bir kullanıcı arayüzü tasarlama penceresi gelecektir. Bu pencerenin sağ tarafında kullanıcı arayüzünde olmasını isteyeceğiniz bileşenler bulunmaktadır.
GUI-3
GUI-3

Yeri gelmişken bir kaç konuyu anlatmak istiyorum;
MATLAB GUI de temelde 3 prensip vardır. Bunlar, arayüzü oluşturacağınız figür, figür üzerine yerleştireceğiniz bileşenler (pushbutton, label, textbox vb.) ve en önemlisi "callbacks" dediğimiz kullanıcıdan gelen girdilere göre hangi işlevlerin yerine getirileceğinin belirlendiği fonksiyonlardır.
Şimdi basit bir kullanıcı arayüzü tasarlayarak bir önceki yazımda anlattığım fonksiyonlarla yazılmış bir fonksiyonu çağıralım. Bu fonksiyon kullanıcıdan aldığı frekans bilgisine göre yeni bir figürde sinus grafiği çizsin, işlem bittiğinde de bizim istediğimiz bir uyarıyı versin "çizdim" desin mesela. Bunun için bize neler gerekli öncelikle buna karar verelim; kullanıcının frekans bilgisini girebilmesi için "textbox", bu textbox ın hangi işlev için kullanılacağını yazacağımız label için "static text", kullanıcının çizdirme işlemini gerçekleştirecek programı çağırması için pushbutton a basması gerekli olsun, bunun içinde bir "pushbutton" koymalıyız. Çizim yapıldıktan sonra verilecek uyarı içinde yine static text koyabiliriz. Static text kullanıcının değiştiremesini istemdiğimiz kullanıcı arayüzünde bulunmasını istediğimiz yazılar için kullanılır. Yukarıda anlattıklarım çok basit gelebilir ancak bu şekilde başlamak inanın işleri çok ama çok kolaylaştırmaktadır. Arayüze koyacağınız bileşen sayısı arttıkça karmaşıklık artacağından bunlara önceden karar vererek isimlendirmeye dikkat ederseniz hem programınızın güncellenebilirliği kolay olur hem de kullanıcı arayüzünü çok daha çabuk hazırlayabilirsiniz.
Herhangi bir bileşeni figür üzerine koyabilmek için, fareyle o bileşenin simgesi üzerine tıkladıktan sonra figür üzerinde bileşeni yerleştireceğiniz yere tıklamanız yeterli olacaktır. Yerleştirdiğiniz bileşenlerin yerlerini istediğiniz zaman yine fareyi kullanarak değiştirebilirsiniz. Aşağıdaki figüre pushbutton, textbox ve static text i yerleştirdik.

GUI-4
GUI-4

Ancak görüldüğü gibi bileşenler üzerinde istediğimiz ya da amacımıza uygun şeyler yazılı değil. Bunları değiştirebilmek için; özelliğini değiştirmek istediğimiz bileşenin üzerine gelip farenin sağ tuşunu kullanıyoruz. Açılan menuden "Property Inspector" ı seçiyoruz.
Pushbutton için bu işlemi yaptığımızda pushbutton etiketini "Cizdir" olarak değiştirdim. Yazı fontunu da istediğim gibi değiştirdim ve bu pushbuttona anlamlı bir isim verdim. (GUI siz yeni bir bileşen eklediğinizde buna otomatik olarak tekil bir isim verir, pushbutton1, pushbutton2, ... gibi. İsimlendirme önemli çünkü siz yeni bir bileşen ekleyip sildiğinizde isimlendirmeye en son kalınan yerden devam eder ve kontrolü kaybedebilirsiniz, örneğin bir şekilde pushbutton4 ü silmek istediğinizi düşünelim, sonra tekrar bir pushbutton koymak istediniz, yeni eklenen pushbutton5 olarak isimlendirilecektir. Bu arada pushbutton 4 ya da pushbutton5 niçin konulmuş ismine bakılındığında anlaşılmıyor değil mi?)

GUI-5
GUI-5

Aynı şekilde diğer bileşenlerin özelliklerini değiştirdikten sonra sıra geldi cizdiriCagir pushbutton a basıldığında, yazdığımız fonksiyonun çağrılmasına. Bunun için pushbutton üzerinde sağ klikleyip aşağıdaki gibi "Callback" i tıklıyoruz.

GUI-6
GUI-6

% --- Executes on button press in cizdiriCagir.
function cizdiriCagir_Callback(hObject, eventdata, handles)
% hObject handle to cizdiriCagir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

Medit programında otomatik olarak açılan kısım pushbutton a tıkladığınızda çalıştırılacak olan fonksiyondur. Buradan ornek2 fonksiyonunu çağırmalıyız ama önce frekans bilgisini textboxtan almamız gerekiyor. Bunun için aşağıdaki satırları kodunuza eklemelisiniz;

function cizdiriCagir_Callback(hObject, eventdata, handles)
% hObject handle to cizdiriCagir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

frekans = get(handles.frekansgir,'String');
frekans = eval(frekans);
ornek2(frekans);

ornek2 fonksiyonu:
function ornek2(frekans)
t=0:0.01/frekans:10/frekans;%time index

y2=sin(t*pi*2*frekans);%output 2
figure,plot(t,y2);

GUI tasarlarken kullanacağınız en önemli iki fonksiyon set ve get fonksiyonlarıdır. Adlarında da anlaşılacağı üzere objelerin özelliklerini almaya (get) ve objelerin özelliklerini kurmaya (set) yararlar. Bu iki fonksiyonla ilgili detaylı anlatımı bir sonraki yazıma bırakıyorum.

Matlab da en kullanışlı fonksiyonların başında bence eval fonksiyonu gelmekte (birde feval var tabi). Frekans textbox ı içerisinden bilgiyi aldıktan sonra eval fonksiyonu ile onun numerik bir değere çevirdik ve aynı isimdeki değişkene atadık (MATLAB ı kullanışlı yapan bir başka güzellik).
Bir başka medit sayfasında yazıp kaydettiğimiz ornek2 fonksiyonumuzu frekans parametresi ile çağırdık. Karşımıza istediğimiz frekansta bir sinus figürü çıktı. Arayüzde de çizdim mesajı çıktı. Nasıl çıktığını da bir sonraki yazımda anlatacağım bu yazı çok uzadı şimdilik bu kadarı yeter diye düşünüyorum...Bundan sonraki yazı GUI ve MATLAB ile Veritabanı uygulamaları üzerine olacak...

GUI-7
GUI-7

Çalıştıktan sonra:

GUI-8
GUI-8
/* halerg yazdı. 29 Nisan 2009 11:30. 17 yorum var */

Yorumlar

teşekkürler,çok güzel bir yazı olmuş.Ancak devamı gelecek mi? Diğer komutlar içinde (isempty,persistent,str1 vb)birkaç açıklayıcı örnek verir misin? birkaç edittext in oldugu bu değerlerin birkaç formulle işlevlendirildiği bir örnek güzel olurdu.
Ve bunları matlab'den bağımsız olarak çalıştırabilir miyiz? .exe yapıp istediğimiz bilg.'da kullanabilirmiyiz? .m kodları için var
>>mcc -m mdosyasınınismi

şeklinde compiler seçilerek yapılıyordu ancak .fig dosyalarında da durum bu şekildemi?
bu arada verdiğin kod bende çalışmadı.Sadece pusbutton için verdin galiba.edittext'i nasıl programlıyoruz. tam kodu paylaşırmısın?

merhaba begendigine sevindim
devami gelecek yazida da belirttigim gibi:)))
zaman bulabilirsem tabi
istedigin gibi bir ornekte koyarim bir dahaki yaziya
exe yapmaya gelince evet exe yapabiliyorsun figure bile olsa...exe dosyayi calistirdiginda matlab figuru aciliyor yine degisen hic birsey yok ancak bir takim ayarlamalar yapmak gerek kullandigin surume bagli olarak
soyledigin komutlarla ilgili ornekler vermeye calisirim
tam kodu nasil gonderebilirim?

nasil gonderebilirim derken nasil gondermemi istersin manasinda soyledim kod cok uzun ve gereksiz cok sey var buraya atmayayim demek istedim

şu örneğe bakarak visual basic'ten farkı nedir matlabın?

/* if life="" then call BatsinBuDunya() */

oncelikle boyle bir soru sordugun icin gercekten cok tesekkurler boylece anlatmak istedigim bazi seyleri yazma firsati buldum (durduk yerde yazsamda olurdu ama olsun boylesi daha iyi:))))
matlab visual basic,c,c++ gibi dillerden farkli bir yapisi var aslinda cok genis bir kullanici kitlesi var ama kimse (ben de dahil:))) bu yazilimin tamamina hakimim diye iddia edemez hatta mathworks te calisan arkadaslar bile...

muhendislik istatistik ekonomi vb gibi dallarda yogun hesaplama gerektiren islevler icin kullaniliyor bu gibi amaclara yonelik program gelistirmekten bahsediyorsak diger yazilimlardan cok daha kolay oldugunu dusunuyorum.

burada anlatilanlarin arayuz calismasinin hedef kitlesi ise zaten matlab kullanicisi olan ve asil amaci super gorsel ve ergonomik bir arayuz olusturmaktan cok yazdigi kodlarin daha rahat bir sekilde kullanilmasini saglamak olan kisilerdir.

Esasen vbasic ve matlab i kiyaslamanin dogru bir yaklasim oldugunu dusunmuyorum. Soyleki; ornegin bir matrisin eigen degerlerini bulabilmek icin c de javada vbasic te (bunlarin hepsinde bu soyledigim seyi yazdim) uzunca kod yazmaniz gerek (trivial bisi degil) ancak bunu matlab da yapmak oldukca basit eig yazmaniz yeterli..
benim bu yazilari yazmaktaki amacta insanlarin matlabi kullanarak zaman ve enerjilerini bos yere harcamamalarina yardimci olabilmek

ben verdiğiniz anlatımda matlabın GUI oluşturma olaylarına bakınca visual basic GUI panellerini hatırladım. Bana kalırsa birebir kopyası bile denebilir. Textboxlar vs'ler ekleme yöntemleri özelliklerini tıklama ile değiştirmek vs vs.. Bu visual basic'in ana konseptidir zaten. Bu açıdan vb'in kopyası diyebilirim matlaba..

Ayrıca uzun kod yazmak yoktur diyorsunuz matlab'da ancak bu bir çok programlama platformunda geçerli.. Hazır gelen framework'ler kütüphaneler çatılar DLL'ler OCX'ler ve Exeler ve Win API'ları zaten uzunca kod yazmanızı ve performans kayıplarımızı engelliyorlar.

Buna rağmen neden matlab gibi yeni bir sentax daha öğreneyim ki?

/* if life="" then call BatsinBuDunya() */

hakli olabilirsin ama soylediklerimi tam izah edemedim sanirim
bu soylediklerin aslinda diger dillerde de benzer sadece vb de degil
ama matlab a vb nin kopyasi demek biraz abartili olmus:)) neyse tam olarak ne yaptigini ogrenebilirmiyim ogrenci? meslek? belki o zaman daha rahat anlasabiliriz ornegin yukaridaki gibi bir sinus cizdirmek ihtiyaci hissettin mi ya da ne biliyim fft aldin mi ya da bir onceki yazida arkadasin soyledigi gibi regresyon analizi hipotez testleri ya da bir ucagin aerodinamik modelini olusturmaya ihtiyacin oldumu yoksa gorselligin on planda oldugu ya da veritabani uygulamalari vs islerle mi ugrasiyorsun boyleyse dedigin dogru ama surekli fft alman gereken sinyal isleme uygulamalari yazacaksan image processing video processing yapacaksan baska bir dille neden yapmaya kasayimki yapilamaz demiyorum sadece bence cok daha rahat diyorum

ben matlabı komple vb kopyası olarak betimlemedim. Yanlış alamışsınız. Makalede anlattığınız GUI oluşturma kısımları sürükle bırak şeklinde yapılmış ki bu işi ilk yapan microsoftun visual basic platformudur. Görsel olarak winForm'u oluşturur, görsel olarak programınıza menüler ekler ve yine çek bırak metodlarıyla programa onlarca öğeyi eklersiniz. Bunları normal bir c++ programda tonlarca kod yazarak yaparsınız. Bu açıdan matlab vb kopyası olmuş. Yani vb'nin gittiği yol izlenmiş diyelim daha kibar şekilde..

Çizim ve animasyon işlemleri için openGL ve directX kütüphaneleri mevcuttur. İşim için gerektiklerinde bu çatılara erişerek gereken işlemleri gayet pratik ve profesyonel biçimde elde edebilirim. Diğer işler içinde piyasada binlerce framework var. İçlerinden bir kaçı mutlaka işimi görür. Ve ben sentaks değiştirmeden ve rahatlıktan ödün vermeden 3-5 satır kodla yine işlerimi görürüm.

/* if life="" then call BatsinBuDunya() */

Selamlar,

VB, c++, c# vs vs bunların hepsi genel amaçlı uygulama geliştirme dilleridir. Farklı platformlar için, çok farklı konularda uygulamalar geliştirmek için kullanılırlar. Ama özellikle bazı konularda kolaylık sunarak öne çıkarlar. (kolay gui tasarımı, kolay vt bağlantısı vs vs)

MATLAB ise genel amaçlı bir uygulama geliştirme dili değildir. Hatta uygulama geliştirme platformu olduğunu bile söyleyemeyiz. (yazdığınız kodu dll-exe haline getiriyor isterseniz, ama bu özellik matlab kullanıcıları için elzem değil her zaman)

MATLAB bilimsel hesaplamalar için özelleşmiş bir konsoldur. Yazıyı yazan arkadaşımız birkaç örnek vermiş yorumlarda. Matlab matrisleri temel alarak, vektörler üzerinde aklınıza ve bilim adamlarının aklına gelebilecek tüm fonksiyonları içinde temelden barındırır. buna ek olarak Yapay sinir ağları, optimizasyon algoritmaları, görüntü işleme, sinyal işleme, veri elde etme (data aquisition) vb gibi şu anda aklıma bile gelmeyecek onlarca konuda birinci sınıf ek kütüphaneler de içerir (toolbox der kendisi bunlara)

Eğer akademisyenseniz, veya teknoloji ağırlıklı bir işiniz varsa (ar-ge ye dayalı mesela) o zaman MATLAB (veya bu tarz diğer programlar) sizin hayatınızı kurtarır. c++ biliyor olsanız dahi MATLAB gibi programlar kullanırsınız çünkü eğer kullanmazsanız, siz internette en iyi kütüphaneyi araştırırken, rakipleriniz 3 dakikada işini halleder.

Mikroskobunda resim çekip, hücre saydır, yara resmi çekip, tanıya yardım et, mp3 encoder-decoder yap, sistem tasarla simüle et, otomatik park eden araba simüle et, vs.vs.. daha neler neler (çok küçük örnekler oldu bunlar, o derece)

ustat eline saglik cok guzel izah etmissin

Bu ne hız :)
birde şu diğer komutlar ve parantez içlerinin ne anlam ifade ettiği ve diğer input ve formüllerle nasıl iletişim içinde olduklarını anlasak tam olacak.
Büyük paraların döndüğü bir ar-ge projesinde değilim:) e akademisyende değilim.excel'de yapılabilecek basit bir maliyet ,gerekli güç hesabını bunda yapalım birde güzel bir arayüz olsun istiyorum çokmu? :)
Diğer konuları sabırsızlıkla bekliyorum.

Eğer matlabda yapabildiklerinizi, başka bir platformda da kolayca yapabiliyorsanız (o platformun temel kütüphane ve araçlarıyla), o zaman aslında matlab'a ihtiyacınız yok diyebilirim. Matlab, ihtiyacınız yokken heveslenip öğrenmeniz gereken bir araç değil kanımca. Ama ihtiyaç duyarsanız, emin olun bunu hissedersiniz :)

Yine de matlab ile ilgili birkaç makale tavsiye edebilirim.
MATLAB İle Programlamaya Giriş: http://www.teknohaber.net/makale.php?id=30808
Yapay Sinir Ağları ve Matlab kullanımı : http://www.teknohaber.net/makale.php?id=70225

Matlab, telefon rehberi programlarımızı yapmamız için gerekli bir uygulama platformu değil. Telefon rehberi yazacaksak C#, vb gibi diller ile hızlıca işimizi görürürüz.

Ama Matlab içinde 100den fazla toolbox geliyor, hepsinin görevi farklı. vb ile oturup da Matlab kadar hızlı uzay mekiği modellemesi, rüzgar türbini modellemesi, hidrojen yakıt pili modellemesi yapabilen olur mu? :) Ya da rüzgar türbini modellerken, türbinin dönüş hızını, kanatların esneme payını, rüzgarın ne kadarının sisteme girip ne kadarının direnç göstererek enerji üretimine girmediğini görebilir mi?
Matlab kullanmanın amacı, matematiksel modellemeleri çok hızlı şekilde halletmektir. Matlab, matris laboratory demek zaten; tüm işlemlerinizi matris kullanarak yaparsınız; yani herşey matematik model.

Buradan çıkan sonuç; Matlab finans, mühendislik, genetik-biyoloji, matematik gibi konularda geliştirilmiş bir paket programdır. Bu tarz işlemlerde daha hızlı sonuç alabileceğiniz bir dil, uygulama platformu yok.
Nasa, uzay mekiklerini tasarlarken Matlab kullanıyor, daha önce iptal edilen bir Nasa projesini inceleme imkanımız olmuştu.

C++ ile geliştiriliyor Matlab, C ya da C++ geliştiricileri Matlab'e kendi toolboxlarını ya da özel fonksiyonlarını yazabilir.

Mrb arkadaşlar lazerle mesafe ölçümü yaparak bunu pc de bir program ile arayüz oluşturarak göstermek istiyorum.web cam kullanarak lazer ışının geri gelme süresinide hesaba katarak mesafe hesabı yapmak istiyorum.bunun için matlap mı yoksa c mi kulanmam gerekiyor. ayrıca web camdaki görüntyüyü programa nasıl aktarırım.

Matlab işinizi hızlandırır.
matlab webcam yazarsan arama motoruna, birşeyler bulabilirsin.

Image Acquisition Toolbox kullanarak webcamden goruntu alabilirsin, gercek zamanli olarak, lazerle mesafe olcumunu yapacagin cihazlarin yaptigi olcumleride matlabdan alman mumkun, ancak kullanacagin cihazin nasil haberlestigine bagli olarak cozum yolu degisir.

meraba HALERG seninle yazışabilceğimiz bir email adresi werebilirmisin.
birşeyler danışmak için.MATLAB İLE İLGİLİ

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork