Tkinter Combobox
Bu eğitimde, kullanıcıların bir değer kümesinden bir değer seçmesine olanak tanıyan bir Tkinter birleşik giriş kutusu widget'ı oluşturmayı öğreneceksiniz.
Tkinter Combobox widget'ına giriş
Birleşik giriş kutusu, Giriş widget'ı ile Liste Kutusu widget'ının birleşimidir . Birleşik giriş kutusu widget'ı, bir değerler kümesinden bir değer seçmenize olanak tanır. Ayrıca özel bir değer girmenize de olanak tanır.
Birleşik giriş kutusu oluşturma
Bir açılan kutu widget'ı oluşturmak için yapıcıyı kullanacaksınız ttk.Combobox()
. Aşağıdaki örnek, bir birleşik giriş kutusu widget'ı oluşturur ve onu bir dize değişkenine bağlar :
current_var = tk.StringVar()
combobox = ttk.Combobox(container, textvariable=current_var)
Kod dili: Python ( python )
Birleşik giriş kutusu widget'ını yerleştirmek istediğiniz pencere veya container
çerçevedir .
Bağımsız değişken textvariable
, bir değişkeni current_var
açılan kutunun geçerli değerine bağlar.
Şu anda seçili olan değeri elde etmek için current_var değişkenini kullanabilirsiniz:
current_value = current_var.get()
Kod dili: Python ( python )
get()
Alternatif olarak, açılan kutu nesnesinin yöntemini kullanabilirsiniz :
current_value = combobox.get()
Kod dili: Python ( python )
set()
Geçerli değeri ayarlamak için current_var değişkenini veya açılan kutu nesnesinin yöntemini kullanırsınız :
current_value.set(new_value)
combobox.set(new_value)
Kod dili: Python ( python )
Değer listesini tanımlayın
Birleşik giriş kutusu, values
kendisine şu şekilde bir değerler listesi atayabileceğiniz özelliğe sahiptir:
combobox['values'] = ('value1', 'value2', 'value3')
Kod dili: Python ( python )
Varsayılan olarak açılan kutuya özel bir değer girebilirsiniz. Bunu istemiyorsanız seçeneği state
şu şekilde ayarlayabilirsiniz 'readonly'
:
combobox['state'] = 'readonly'
Kod dili: Python ( python )
'normal'
Birleşik giriş kutusunu düzenlemeyi yeniden etkinleştirmek için durumu şu şekilde kullanırsınız :
combobox['state'] = 'normal'
Kod dili: Python ( python )
Olayları bağla
Bir seçim değeri değiştiğinde, birleşik giriş kutusu widget'ı '<<ComboboxSelected>>'
sanal bir olay oluşturur. Olayı işlemek için aşağıdaki gibibin() yöntemini kullanabilirsiniz:
combobox.bind('<<ComboboxSelected>>', callback)
Kod dili: Python ( python )
Bu örnekte, açılan kutunun seçilen değeri değiştiğinde geri çağırma işlevi yürütülecektir.
Geçerli değeri ayarlayın
Geçerli değeri ayarlamak için şu yöntemi kullanırsınız set()
:
combobox.set(self, value)
Kod dili: Python ( python )
Ayrıca şu yöntemi de kullanabilirsiniz current()
:
current(self, newindex=None)
Kod dili: Python ( python )
newindex
Geçerli değer olarak seçmek istediğiniz listedeki değerlerin dizinini belirtir .
Belirtmezseniz newindex
, current()
değerler listesinde veya geçerli değer listede -1
görünmüyorsa yöntem geçerli değerin dizinini döndürür.
Python Tkinter açılan kutu örneği
Aşağıdaki program, bir birleşik giriş kutusu widget'ının nasıl oluşturulacağını gösterir:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from calendar import month_name
root = tk.Tk()
# config the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('Combobox Widget')
# label
label = ttk.Label(text="Please select a month:")
label.pack(fill=tk.X, padx=5, pady=5)
# create a combobox
selected_month = tk.StringVar()
month_cb = ttk.Combobox(root, textvariable=selected_month)
# get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]
# prevent typing a value
month_cb['state'] = 'readonly'
# place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)
# bind the selected value changes
def month_changed(event):
""" handle the month changed event """
showinfo(
title='Result',
message=f'You selected {selected_month.get()}!'
)
month_cb.bind('<<ComboboxSelected>>', month_changed)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

Aşağıdaki program aynı ayın birleşik giriş kutusu widget'ını gösterir ve geçerli değeri geçerli aya ayarlamak için set() yöntemini kullanır:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from calendar import month_name
from datetime import datetime
root = tk.Tk()
# config the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('Combobox Widget')
# label
label = ttk.Label(text="Please select a month:")
label.pack(fill=tk.X, padx=5, pady=5)
# create a combobox
selected_month = tk.StringVar()
month_cb = ttk.Combobox(root, textvariable=selected_month)
# get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]
# prevent typing a value
month_cb['state'] = 'readonly'
# place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)
# bind the selected value changes
def month_changed(event):
""" handle the month changed event """
showinfo(
title='Result',
message=f'You selected {selected_month.get()}!'
)
month_cb.bind('<<ComboboxSelected>>', month_changed)
# set the current month
current_month = datetime.now().strftime('%b')
month_cb.set(current_month)
root.mainloop()
Kod dili: Python ( python )
Özet
ttk.Combobox(root, textvariable)
Birleşik giriş kutusu oluşturmak için kullanın .- Kullanıcıların özel değerler girmesini önlemek için
state
özelliği olarak ayarlayın .readonly
- Bir birleşik giriş kutusu widget'ı,
'<<ComboboxSelected>>'
seçilen değer değiştiğinde olayı yayar.
Kaynak