19 Temmuz 2011 Salı

Cink Konsolunu Bölümlendirme

Bir süre önce başladığımız cink projesinde almış olduğum konu konsolu yakuakedeki gibi bölümlendirebilmekti. Stajın ilk iki haftası boyunca bu konuyla ilgilendim. İlk haftanın sonunda bölümlendirmenin nasıl yapılacağını kavramıştım,sadece bunu cink'in kodlarına aktarmak kalmıştı. PyQt ile geliştirmekte olduğumuzdan Qt'nin QSplitter sınıfını kullandım. QSplitter tam olarak içine istediğiniz gibi widget ve splitter yerleştirebileceğiniz bir widgettır . İlk olarak QMainWindow dan bir nesne oluşturdum ve bu nesneden bir splitter yarattım,bu splittere mainwindoun içine yerleştirdikten sonra splitterda bir değişiklik yapmadan içine bir QTermWidget nesnesi oluşturarak yerleştirdim. Bölümlendirme yatay ve dikey olacağından bende Horizontal ve Vertical olarak iki ayrı metot tanımladım ve bu metotlara erişimi QShortcut ile gerçekleştirdim. Bu shortcutları kodda mainin içinde yazdım.


shortcut = QShortcut("Ctrl+Shift+a",w,w.Horizontal)
shortcut = QShortcut("Ctrl+Shift+g",w,w.Vertical)


Daha sonrasında Vertical ve Horizontal metotlarının içine bölümlendirmeyi yapabilmek için birbirine çok benzer kodlar yazdım. Bu iki metodun tek farkı yönlendirme yapma kısmıydı yani :

selectedSplitter.setOrientation(Qt.Qt.Horizontal)

Bu kısım splittera ,bu splitterdan oluşturduğumuz nesneleri nasıl yerleştireceğini söylüyor. Başlangıçta splitterın içine yerleştirdiğim termwidget nesnesinin bu metotlarda kapatmam gerekti, bu şekilde oluşturduğum splittera yönlendirme yapabildim. Termwidget nesnesinin splitterdan kaldırdıktan sonra bu splitterdan iki tane splitter oluşturdum : splitter1=Qt.QSplitter(selectedSplitter)
 Bu splitterları oluşturduktan sonra başlangıctaki splittera yatay/dikey yönlendirme yaptım ve splitter içine yatar/dikey olarak yerleşen splitterların birinin içine daha önceden gizlemiş olduğum splitterı diğerine de yeni bir termwidget nesnesi oluşturarak yerleştirdim.


selectedWidget.setParent(splitter1)  yazdıktan sonra birde bu widgetı gösterebilmek için selectedWidget.show() satırını ekledim.


Bu şekilde her seferinde seçmiş olduğum termwidget nesnesini focusWidget() metodu ile alıp , bu nesnenin parent'ını alarak seçilen splittera ulaşmış oldum ve seçilen splitterdan  yatay/dikey olarak yönlendirme yaptıktan sonra iki tane splitter oluşturdum ve bu splitterların içine önceden focuswidget ile aldığım widget nesnesini ve yeni oluşturduğum widget nesnesini yerleştirerek konsolu yatay ve dikey olarak bölümlendirmeyi sağlamış oldum.
Konsolu bölümlendirdikten sonra şimdi ise bu bölümleri tekrar kapatma işi ile uğraşıyorum. Kapatmayı da tamamladıktan sonra o konuyla ilgili de açıklama yazacağım.

Anlatmış olduğum işin kodlarını incelemek isterseniz kodlara buradan bakabilirsiniz: http://svn.comu.edu.tr/websvn/filedetails.php?repname=Cink&path=%2Fproje%2Fcink.py

Hiç yorum yok:

Yorum Gönder