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_varaçı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, valueskendisine ş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 )

newindexGeç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 -1gö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ı:

Tkinter Combobox

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

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...