Entry girilen alanı nasıl büyütebilirim?

Arkadaşlar merhaba, tkinter da veri girişi alacağım Entrybox’u daha uzun bilgiler girebilmek için büyütmek istiyorum. Width komutu çalışıyor fakat height çalışmıyor. İnternetten araştırdığım kadarıyla entrybox a scrollbar ekleniyormuş araştırdım fakat bir şey anlayamadım. Entrybox’u aşağı doğru nasıl büyütebilirim veya scrollbar ı nasıl kullanabilirim yardımcı olur musunuz?
Örnek olarak yaptığım programdan entry kesiti:

telno = tkinter.Entry(veripenceresi, font="Arial 13" ,bg="#e6c619", width=18)
telno.place(x=10, y=250)
1 Beğeni

Merhaba, tk.Entry tek satırlık veri alımı için tasarlanmış; height diye bir parametre kabul etmemesinin sebebi o olsa gerek. Size lazım olan tk.Text olabilir mi?

import tkinter as tk

root = tk.Tk()

tel_no = tk.Text(root, width=16, height=3)
tel_no.place(x=5, y=10)

root.mainloop()

Dokümantasyonda da belirtildiği üzere width parametresinin birimi karakter iken, height parametresininki satır oluyor. Yani yukarıda 16 karakter genişliğinde ve 3 satır uzunluğunda bir tk.Text objesi oluşturuyoruz.

merhaba text ile girdi işlemi yapabilir miyim, yani entryle aynı görevi mi görüyor?
yapmak istediğim o kısma veri yazıp sqlite veritabanına girilen veriyi yazdırmak

Evet, tk.Entry tek satıra yönelik, bu çoklu satıra da izin veriyor. get ile verisine ulaşırken de hangi satır ve karakterden itibaren veriyi almak istediğinizi ve nereye kadar almak istediğinizi belirtiyorsunuz:

import tkinter as tk

def yazdir():
    # baştan sona kadar
    yazi = tel_no.get("1.0", tk.END)
    # sondaki \n'den kurtuluyoruz
    yazi = yazi[:-1]
    print(yazi)

root = tk.Tk()

tel_no = tk.Text(root, width=16, height=3)
tel_no.place(x=5, y=10)

buton = tk.Button(root, text="ekrana yaz", command=yazdir)
buton.place(x=5, y=70)
    
root.mainloop()

“1.0”'daki 1 hangi satırdan itibaren olduğunu, 0 ise hangi karakterden itibaren olduğunu söylüyor. (Maalesef ikisi arasında 0 veya 1’den başlama konusunda bir tutarsızlık var.) tk.END diyerek de sonuna kadar, yani ne var ne yok her şeyi alsın diyorsunuz. Ama sonuna kendisi bir adet line feed yani "\n" ekliyor. Bundan kendiniz [:-1] (veya belki rstrip("\n")) ile kurtulabilirsiniz. Alternatif olarak ise tk.END yerine (ki tk.END aslında "end" string’ine eşittir), "end-1c" diyerek “sonundan 1 karakter eksik olsun” diyebilirsiniz. Yani

def yazdir():
    # baştan sona kadar ama \n'yi alma
    yazi = tel_no.get("1.0", "end-1c")
    print(yazi)

Bu kullanım okunabilirlik ve niyeti daha açık belli etme açısından tercih edilebilir. print yerine siz veriyi SQLite’a gönderebilirsiniz.

2 Beğeni

Çok teşekkür ederim bu yöntemi kullanarak programımı oluşturacağım :slight_smile:

1 Beğeni