combobox’un içerisindeki verileri, isim seçerken tek tek gezmek zorunda kalıyorum . 3-5 isim oldugunda problem yok ama mesela bu isimleri bir veri kaynağından alsaydım 250 kadar isim olsaydı mesela “k” harfine bastıgımda comboboxun içerisindeki direk “k” harfi ile başlayan isimlerin olduğu yere gelebilmek istiyorum. Böyle bir fonksiyon var mı acaba combobox için ?
Ubuntudaki Tab
işlevi gibi birşeymi arıyorsunuz ?
Zaten arama yapınca “key” tuşlarina hızlıca basınca kayitli olan “keyboard” yazisi çıkmıyor mu?
(Kelimeler örnektir)
Malesef Ubuntunu ve ubuntundaki tab işlevini bilmediğim için cevap veremiycem
form=tk.Tk()
form.title(“Corona Verileri”)
form.geometry(“500x400+500+400”)
form.config(bg=“pink”)
combobox=Combobox(form,value=ulkeler)
combobox.place(relx=0.1,rely=0.1,width=200)
form.mainloop()
https://prnt.sc/t1khop buradaki arayüzü yukardaki kodlarla oluşturdum. (ulkeler adlı liste veritabanından alınıyor .) Ekran görüntüsündeki yerde “T” bastıgımda Turkey veya “T” ile başlayan diğer ülkelere hızlıca gelmesini istiyorum. Yandaki barı çekerek değil. Şu ekranda şu kodlarla dediğimiz işlem olmuyor.
Çalışan bir kod örneği ve ülkeler listesini paylaşabilir misiniz?
import requests
import tkinter as tk
from tkinter.ttk import Combobox
ulkelerUrl="https://api.covid19api.com/countries"
ulkelerJson=requests.get(ulkelerUrl)
ulkelerPython=ulkelerJson.json()
ulkeler=[]
for x in range(0,len(ulkelerPython)):
ulkeler.append(ulkelerPython[x]["Country"])
ulkeler.sort()
form=tk.Tk()
form.title("Corona Verileri")
form.geometry("500x400+500+400")
form.config(bg="pink")
combobox=Combobox(form,value=ulkeler)
combobox.place(relx=0.1,rely=0.1,width=200)
form.mainloop()
Kodlarınız ``` arasına alabilirsiniz:
```python
<kodlar buraya gelecek>
```
Şu işinizi görür mü:
import requests
import tkinter as tk
from tkinter.ttk import Combobox
ulkelerUrl="https://api.covid19api.com/countries"
ulkelerJson=requests.get(ulkelerUrl)
ulkelerPython=ulkelerJson.json()
ulkeler=[]
for x in range(0,len(ulkelerPython)):
ulkeler.append(ulkelerPython[x]["Country"])
ulkeler.sort()
form=tk.Tk()
form.title("Corona Verileri")
form.geometry("500x400+500+400")
form.config(bg="pink")
def outo_change_on_input(combobox):
original_values = combobox["value"]
def update():
text = combobox.get().lower()
combobox["value"] = [i for i in original_values if i.lower().startswith(text)]
def callback(event):
combobox.after(0, update)
combobox.bind("<Key>", callback)
combobox = Combobox(form, value=ulkeler)
combobox.place(relx=0.1, rely=0.1, width=200)
outo_change_on_input(combobox)
form.mainloop()
çok teşekkürler
Gönderimi “Çözüm” olarak işaretleyebilirsiniz.
Tkinter biraz uğraştırıcı bir arayüz kütüphanesi, bunun gibi modern arayüzlerde bulunan özellikler istiyorsanız PyQt kullanmayı deneyebilirsiniz.
5 dakikalık bir araştırmada tkinter widget’lerinin bind’lendiği fonksiyonu çağırmadan önce event’i işlemesinin bir yolunu bulamadığım için combobox.after
kullandım. Yoksa combobox.get
bir karakter eksik döndürüyor.
combobox.bind("<Key>", callback)
kısmı combobox üzerinde herhangi bir tuşa basıldığında callback
fonksiyonunun çağırılmasını sağlıyor. callback
'daki combobox.after(0, update)
'nin sebebini yukarıda söyledim zaten. update
fonksiyonu da combobox’daki elemanları filtreliyor.