Giter Site home page Giter Site logo

grafical-match-matrix's Introduction

Grafical-Match-Matrix

iki dizilimin eşleşen noktalarını gösteren bir tablo oluştuturur.

Süreç

• Ödevi yapacağım dil olarak Python programlama dilini seçtim.
• Görsel programlama için ise PyQt5 modülünü kullanmaya karar verdir.
• PyQt5 modülünde Qt Designer aracı ile form tasarımı yapılabiliyor. Bende biri kullanıcıdan değerleri alacak olan pencere, diğeri tablo penceresi olmak üzere 2 pencere(widget) oluşturdum. Bunları _window ve _table olarak isimlendirdim.
• _window ve _table dosyaları üzerinde de düzenlemeler yaptım. Qt Designer ile oluşturduğum yapıyı iskelet olarak kullandım.
• Sonrasında işlemlerimi yürüteceğim process.py dosyasında _window ve _table’ı import ettim.
• İşlemlerimi daha kolay yürütebilmek için, process.py’da bir sınıf oluşturdum ve isim olarak “Match” ismini verdim. Bütün süreci bu sınıf üzerinden yönettim.
• Pythonda __init__ metodu yapılandırıcı metot(constructor) olarak kullanılıyor. Match sınıfını oluştururken QtWidget sınıfından miras aldım. __init__ metodunda super() ile miras aldığım QtWidget’a gerekli değerleri gönderdim.
• Yine __init__ metodunda, ui isminde bir nesne oluşturdum ve bu nesneyi pencerelerimi yönetmek için kullandım. İlk pencereyi ve sonrasında açılan tabloyu bu nesne ile yönettim.
• Son olarak da __init__ metodunda kullanıcıdan dizilimleri ve keymer değerini alacağım pencerenin kurulumunu yaptım ve pencereyi açtım.

form
• Bu pencerede kullanıcıdan alınacak olan, first sequence değeri ve second sequence değeri düzgün bir değer olduğu varsayılmıştır. Kullanıcının gireceği keymer değeri(n-value) de bir tamsayı olarak varsayılmıştır. .
• Kod tarafında kullanıcıdan gelen değerleri almak için getSequence() metodunu ve gelen sekansı keymerlerine ayırmak için de divideSequence() metodunu kullandım. Ardından getSequence() metodu içerisinde kullanıcından değerleri alan pencereyi kapattım.
• Tabloyu oluşturması için createTable() isimli bir metot tanımladım ve bu metoda getSequence() metoduyla kullanıcıdan alınmış ve divideSequence() metoduyla keymerlerine ayrılmış liste tipindeki first ve second sekanslarını verdim.
• Sekansların uzunluklarını bulup, bu uzunluklara göre tablomu oluşturdum. Tabloda first sekansını sütun başlıklarına, second sekansını satır başlıklarına verdim.
• Tablodaki bütün satır ve sütunların genişliklerini ayarlayan bir metot bulamadım, setColumnWidth() ve setRowHeight() metotları sadece belli bir satır veya sütunun genişliğini ayarlayabiliyordu bu yüzden, döngü kullanıp bütün satır-sütunların genişliklerini ayarladım.
• Ardından tabloda eşleşen keymerleri bulma, sayma ve renklendirme işlemine geçtim. Bu işlemi en verimli nasıl yaparım diye üzerinde düşündükten sonra, çözüm olarak sırasıyla tablodaki diagonelleri gezmeye karar verdim. Algoritmayı anlatması biraz zor, özet olarak; first sekans uzunluğu + second sekans uzunluğu – 1 adet olan digonalleri gezmek için biri ortadaki diagonal, diğer biri ortadaki diagonalin üst kısmındaki diagonaller, sonuncusu da ortadaki diagonalin alt kısmındaki diagonaller için olmak üzere 3 döngü sistemi kurdum. Bu döngüler, eşleşme bulduğunda countı arttırıp, renklendirir ve count sayısını o hücreye yazar. Eşleşme bulamadığı yerde de countı sıfırlayıp oluşturduğum newColor() metodundan farklı bir renk alır. Bu şekilde bütün diagonalleri gezip, eşleşen yerleri renklendirir. Son olarak da tabloyu gösterir.

tablex

Sonuç

Sonuç olarak, kullanıcıdan sekansları ve n değerini alan, sekansları keymerlerine ayıran, bir tablo oluşturup burada keymerleri eşleştiren, eşleşen keymerleri sayıp renklendiren ve son olarak da bu tabloyu bize gösteren bir program yazmış oldum. Ödev sırasında birçok hata aldım, çözmek için saatlerce uğraştım. PyQt5 ile ilgili birçok dökümana baktım. Python’daki OOP mantığı Java’dan çok farklı. Bu noktada biraz zorlandım. Ancak, benim açımdan gayet verimliydi. Güzel bir ödevdi.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.