TUI'ler nasıl çalışır?

Merhaba, soru başlıkta yazıyor ama biraz daha detaylandıracağım. TUI’ler nasıl çalışır (diğer adıyla CLI’ler) ? PyQt5 te rahatça bir QLineEdit ekleyebilir ve istediğimiz zaman oraya yazdığımız yazıyı değiştirebiliriz ancak TUI’ler de durumun farklı olması gerekirken TUI’ler de de istediğimiz zaman değiştirebiliyoruz. Şöyle bir program yazdık diyelim:

ad = input("Adın ne ? ")
print(ad)

böyle bir kodda inputu istediğimiz zaman dönüp değiştiremiyoruz ama TUI’ler de durum farklı orda istediğimizde değiştirebiliyoruz, üstelik TUI’ler de konsol üzerinde çalışıyor. Yani TUI’ler nasıl çalışıyor ? Nasıl oluyorda konsolda normalde yapamayacağınız şeyleri TUI’ler konsolda çalışıyor olmasına rağmen yapabiliyoruz ? Kimi TUI’ler mouse u bile algılayabiliyor.

Bakmak isterseniz birkaç örnek vereyim:

Oncelikle: TUI ile CLI ayni sey degil. Videodakiler TUI. Her islem icin bir satir yazi yazmak CLI.

Neden durumun farkli olmasi gerekiyor?

Cunku input fonksiyonu boyle calismiyor.

Konsolda yapamayacagimiz seyleri konsolda calisan TUI’lerde de yapamiyoruz, dogal olarak.


  1. Normalde konsolda ses cikartamiyorken TUI programlari nasil muzik calabiliyor? Konsoldan bagimsiz fonksiyonlar cagirarak.
  2. Bu gosterdigin ve bahsettigin TUI’lerin fonksiyonlarinin tamamina yakinini uc beceriyle yapilabiliyor: 1) Ekranin X/Y pozisyonuna C karakterini yazdir. 2) Klavyeden tus al 3) Mouse durumunu al. ANSI bunlarin ucune de izin veriyor.

ANSI escape sekanslarini ve ncurses kutuphanesini incelemen lazim.

4 Beğeni

Oncelikle: TUI ile CLI ayni sey degil. Videodakiler TUI. Her islem icin bir satir yazi yazmak CLI.

Pardon orda bi yanlışlık oldu :smiley: CLI Powershell, cmd, python shell, bash v.b. oluyor sanırım.

Neden durumun farkli olmasi gerekiyor?

Program terminal üzerinde çalıştığı için farklı olması gerekmez mi ? Yani terminalde yapamadığımız şeyleri TUI ler de de yapamamamız gerekir ya da yazınızın sonunda belirttiğiniz ncurses teki gibi çalıştıkları için durum farklı olmuyor yani Wikipedia’da yazdığı gibi:

programcının metin tabanlı kullanıcı arabirimlerini terminalden bağımsız bir şekilde yazmasına olanak tanıyan

yani TUI ler terminalden bağımsız çalışıyorlar demek oluyor bu.

Konsolda yapamayacagimiz seyleri konsolda calisan TUI’lerde de yapamiyoruz, dogal olarak.

  1. Normalde konsolda ses cikartamiyorken TUI programlari nasil muzik calabiliyor? Konsoldan bagimsiz fonksiyonlar cagirarak.

yukarıda konsolda yapamayacağımız şeyleri konsolda çalışan TUI lerde de yapamayacağımızı söylemişsiniz ama sizinde dediğiniz gibi konsolda ses çıkartamıyorken TUI ler çıkartıyor. Yani anladığım kadarıyla TUI ler konsoldan bağımsız olarak mı çalışıyorlar ?

  1. Bu gosterdigin ve bahsettigin TUI’lerin fonksiyonlarinin tamamina yakinini uc beceriyle yapilabiliyor: 1) Ekranin X/Y pozisyonuna C karakterini yazdir. 2) Klavyeden tus al 3) Mouse durumunu al. ANSI bunlarin ucune de izin veriyor.

Ekranın X/Y pozisyonlarından kastınız ne ? Yani TUI ekranını yazdırmak istediğimiz X ve Y pozisyonlarından mı bahsediyorsunuz ?
Ekranın X/Y pozisyonuna C karakterini yazdırdan kastınız dümdüz C harfi yazdırmak mı yoksa C kodu yazdırmak mı ? Çünkü TUI’lerde ekranda C harfi varmış gibi gözükmüyor ya da var ama ekrandaki C harfleri ANSI escape sekansları aracılığıyla boyandıkları için C harfi varmış gibi gözükmüyor (yani C harfinin arkaplanının rengini ve C harfinin rengini aynı yapmışlar, beyaz bir kağıda beyaz boyalı kalemle yazmak gibi)
Klavyeden tuş almak dediğiniz şey sanırım oyunlardaki gibi örneğin: d tuşuna basıldıysa karakter sağa gitsin, a tuşuna basıldıysa sola gitsin gibi TUI lerde bastığımız tuşları algılayarak ANSI escape sekansları aracılığıyla kürsörü hareket ettiriyor.
Mouse durumunu ANSI ile alabildiğimizi yeni öğrendim, mouse un olduğu yeri ve tıkladığımızı anlayabiliyor mu ? Mesela TUI’ye bir buton ekleyip ona mouse ile tıklayabileceğimizi söylüyorsun anladığım kadarıyla.

ANSI escape sekanslarini ve ncurses kutuphanesini incelemen lazim.

ikisinede bakmıştım, ncurses C dili için sanırım o yüzden curses modülüne de baktım ama o da sadece Linux ve UNIX te çalışıyordu diye hatırlıyorum.

Yine de ikisini de bir daha araştıracağım.

Terminal kullanan hic bir programin terminal uzerinden yapamadigi seyi TUI programlari da terminal uzerinden yapamaz.

Hangi terminalin kullanildigindan bagimsiz olarak tek arayuzle yazmasina olanak sagliyor demek de olabilir.

Programlarin terminal uzerinden yapabildikleri ile baska arayuzler uzerinden yapabildikleri seyler birbirinden bagimsiz. Mouse’u ANSI ile de alabilir, USER32.DLL’den de alabilir, USB paketlerini okuyarak da alabilir.

Konsolun sol ust kosesi = (0, 0)

X ve Y gibi C de bir degisken degeri temsil ediyor.

Ilk vidyonun 14. ve 18. saniyelerinde var. 5. satir, ortalara dogru. “CHANGELOG” kelimesinin ilk harfi olarak :smiley:

Evet, aynen.

Bilmiyorum. Bunu da sen cevaplasana? :slight_smile:

Ama TUI kullanan ya DOS’tadir ya da *nix’lerden birinde.

Hangi terminalin kullanildigindan bagimsiz olarak tek arayuzle yazmasina olanak sagliyor demek de olabilir.

Mantıklı.

Konsolun sol ust kosesi = (0, 0)

Tahmin etmiştim büyük ihtimalle her karakter ayrı bir konum yani şöyle:
abc
aib

c nin konumu = (0, 2)
i nin konumu = (1, 1)

X ve Y gibi C de bir degisken degeri temsil ediyor.

X ve Y nin ne olduğu belli ama C neyi temsil ediyor ?

Ilk vidyonun 14. ve 18. saniyelerinde var. 5. satir, ortalara dogru. “CHANGELOG” kelimesinin ilk harfi olarak :smiley:

:sweat_smile: Yazı olarak orda olduğu doğru, Ekranin X/Y pozisyonun C karakterini yazdır demenizin sebebini şimdi anladım galiba yukarıda verdiğim örnek gibi yani (5, 3) konumuna C yazdır gibi.

Bilmiyorum. Bunu da sen cevaplasana? :slight_smile:

Yukarıda konuştuklarımızın üstünde biraz düşündüm bir de biraz araştırdım cevap evet, mouse u algılayabiliyor olması lazım.

Her konum ayri bir karakter.

Dogru ama bunu da cevirelim:

(0, 2) konumunda = c
(1, 1) konumunda = i

Cunku bir karakter biden fazla konumda olabiliyor ama bir konumda birden fazla karakter olamiyor.

X/Y yukaridaki { 0, 1, 2 }; C de { a, b, c, i }

Aynen. 3 parametre alip ekrandaki bir pozisyonun gosterdigi karakteri degistiren bir fonksiyon gibi dusunebilirsin.

Hatta bkz: int 10, AH=0a

Dogru ama bunu da cevirelim:

(0, 2) konumunda = c
(1, 1) konumunda = i

Cunku bir karakter biden fazla konumda olabiliyor ama bir konumda birden fazla karakter olamiyor.

Doğru orda hata olmuş düzeltilmemiş halinde c sadece (0, 2) konumunda olabiliyor, i’de sadece (1, 1) konumunda.

X/Y yukaridaki { 0, 1, 2 }; C de { a, b, c, i }

Yani X/Y karakterin ekrandaki konumu C de o konuma yazılacak karakter, altta da bahsettiğiniz gibi C de X ve Y gibi bir parametre C nin içine istediğimiz karakteri koyabiliriz.

1 Beğeni