Tkinter Event Binding /Tkinter Olay Bağlama
Bu eğitimde Tkinter olay bağlama mekanizması hakkında bilgi edineceksiniz.
Tkinter olay bağlamasına giriş
Bir widget'ın olayına bir işlev atamaya olay bağlama adı verilir . Olay meydana geldiğinde, atanan işlev otomatik olarak çağrılır.
Önceki eğitimde , bir işlevi seçenek aracılığıyla bir widget'ın olayına nasıl bağlayacağınızı öğrendiniz command
. Ancak tüm Tkinter widget'ları bu command
seçeneği desteklemez.
Bu nedenle Tkinter size yöntem aracılığıyla olay bağlama için alternatif bir yol sunar bind()
. Aşağıda yöntemin genel sözdizimi gösterilmektedir bind()
:
widget.bind(event, handler, add=None)
event
İçinde bir olay meydana geldiğinde , Tkinter olay ayrıntısını otomatik olarak widget
çağıracaktır .handler
Ek bir işleyici kaydetmek istiyorsanız '+'
argümana iletebilirsiniz add
. Bu, aynı olaya yanıt veren birden fazla olay işleyicinizin olabileceği anlamına gelir.
Tkinter olay bağlama örnekleri
Aşağıdaki program, fonksiyonun düğmenin basılan tuşuna return_pressed
nasıl bağlanacağını gösterir :Return
'Save'
import tkinter as tk
from tkinter import ttk
def return_pressed(event):
print('Return key pressed.')
root = tk.Tk()
btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)
btn.focus()
btn.pack(expand=True)
root.mainloop()
Kod dili: Python ( python )
Bu örnekte, aşağıdaki ifade, basılan tuş olayını bind()
bağlamak için düğme widget'ındaki yöntemi çağırır Return
:
btn.bind('<Return>', return_pressed)
Kod dili: HTML, XML ( xml )
bind()
Aşağıdaki örnek, aynı olay için birden fazla işleyiciyi kaydetmek üzere yöntemin nasıl kullanılacağını gösterir :
import tkinter as tk
from tkinter import ttk
def return_pressed(event):
print('Return key pressed.')
def log(event):
print(event)
root = tk.Tk()
btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)
btn.bind('<Return>', log, add='+')
btn.focus()
btn.pack(expand=True)
root.mainloop()
Kod dili: Python ( python )
Odağı düğmeye taşıdığınızda ve Return
tuşa bastığınızda, Tkinter otomatik olarak return_pressed
ve log
işlevlerini çağırır.
Aşağıdakiler, işlevi düğmenin basılan tuş olayına log()
bağlar :Return
'Save'
btn.bind('<Return>', log, add='+')
Kod dili: Python ( python )
Bu ifadede üçüncü argüman, işlev add='+'
olan ek işleyiciyi kaydetti log()
.
Bağımsız değişkeni belirtmezseniz add='+'
, yöntem mevcut işleyiciyi ( ) yenisiyle ( ) bind()
değiştirecektir .return_pressed
log
Etkinlik modelleri
Tkinter, olay adlarını işleyicilerle eşlemek için olay kalıplarını kullanır. Örneğin, <Return>
tuşuna basılan Geri Dönüş tuşunu belirtir.
Aşağıda bir olay modelinin genel sözdizimi gösterilmektedir:
<modifier-type-detail>
Kod dili: HTML, XML ( xml )
Bu sözdiziminde, bir olay köşeli ayraçlarla ( ) çevrelenir <>
. Açılı parantezlerin içinde sıfır veya daha fazla değiştirici, bir olay türü ve olayla ilgili ayrıntılı bilgi bulunur.
Örneğin, <KeyPress-A>
klavyede tuşa basmayı belirtir A
. ve <Alt-Control-KeyPress-KP_Delete>
tuşuna basılmasını temsil eder Alt + Ctrl + Delete
.
Aşağıdaki bölüm en sık kullanılan olay değiştiricileri, etkinlik türlerini ve etkinlik ayrıntılarını gösterir.
1) Olay değiştiriciler
Aşağıdaki tabloda en sık kullanılan olay değiştiriciler listelenmektedir:
Etkinlik Değiştirici | Anlam |
---|---|
Alternatif | Alt tuşu basılı tutulur |
Kontrol | Ctrl tuşu basılı tutulur |
Vardiya | Shift tuşu basılı tutulur |
Herhangi | Bu değiştirici bir olay tipini genel hale getirir. Örneğin, olay modeli <Any-KeyPress> herhangi bir tuşa basıldığında geçerlidir. |
Etkinlik türleri
Aşağıdaki tabloda en sık kullanılan etkinlik türleri gösterilmektedir:
Tip | İsim | Tanım |
---|---|---|
36 | Activate |
Bir widget'ın durum seçeneği etkin değil durumundan etkin durumuna değişir. |
4 | Button |
Bir fare düğmesine basıldı |
5 | ButtonRelease |
Bir fare düğmesi serbest bırakılır |
22 | Configure |
Widget'ın boyutu değiştirildi |
37 | Deactivate |
Bir widget'ın durum seçeneği etkin durumdan etkin değil durumuna değişir. |
17 | Destroy |
Bir widget yok ediliyor. |
7 | Enter |
Fare işaretçisi widget'ın görünür bir kısmına taşınır. |
12 | Expose |
Widget'ın veya uygulamanın bir kısmı başka bir pencere tarafından kapatıldıktan sonra görünür. |
9 | FocusIn |
Giriş odağı bir widget'a taşındı. |
10 | FocusOut |
Giriş odağı widget'ın dışına taşındı. |
2 | KeyPress |
Bir tuşa basıldı. |
3 | KeyRelease |
Bir anahtar serbest bırakıldı |
8 | Leave |
Fare işaretçisi widget'ın dışına taşınır. |
19 | Map |
Örneğin pack() veya grid() yöntemini çağırarak bir konteynerin üzerine bir widget yerleştiriliyor. |
6 | Motion |
Fare işaretçisi tamamen bir widget içinde hareket ettirilir. |
38 | MouseWheel |
Kullanıcı fare tekerleğini yukarı veya aşağı hareket ettirdi. |
18 | Unmap |
Bir widget'ın eşlemesi kaldırılıyor ve artık görünmüyor (örneğin, grid_remove() widget'ta yöntem çağrılırken). |
15 | Visibility |
Uygulama penceresinin en azından bir kısmı ekranda görünür hale gelir. |
Etkinlik Detayı
Aşağıdaki tabloda anahtarları adlandırmanın birkaç yolu gösterilmektedir:
.keysym |
.keycode |
.keysym_num |
Anahtar |
---|---|---|---|
Alt_L |
64 |
65513 |
Sol taraftaki alt tuşu |
Alt_R |
113 |
65514 |
Sağdaki alt tuşu |
BackSpace |
22 |
65288 |
geri tuşu |
Cancel |
110 |
65387 |
kırmak |
Caps_Lock |
66 |
65549 |
Büyük harf kilidi |
Control_L |
37 |
65507 |
Sol taraftaki kontrol tuşu |
Control_R |
109 |
65508 |
Sağdaki kontrol tuşu |
Delete |
107 |
65535 |
Silmek |
Down |
104 |
65364 |
↓ |
End |
103 |
65367 |
son |
Escape |
9 |
65307 |
Esc |
Execute |
111 |
65378 |
SistemReq |
F1 |
67 |
65470 |
Fonksiyon tuşu F1 |
F2 |
68 |
65471 |
Fonksiyon tuşu F2 |
Fi |
66+i |
65469+i |
Fonksiyon tuşu F i |
F12 |
96 |
65481 |
Fonksiyon tuşu F12 |
Home |
97 |
65360 |
Ev |
Insert |
106 |
65379 |
sokmak |
Left |
100 |
65361 |
← |
Linefeed |
54 |
106 |
Satır besleme (kontrol-J) |
KP_0 |
90 |
65438 |
tuş takımında 0 |
KP_1 |
87 |
65436 |
1 tuş takımında |
KP_2 |
88 |
65433 |
2 tuş takımında |
KP_3 |
89 |
65435 |
3 tuş takımında |
KP_4 |
83 |
65430 |
4 tuş takımında |
KP_5 |
84 |
65437 |
5 tuş takımında |
KP_6 |
85 |
65432 |
6 tuş takımında |
KP_7 |
79 |
65429 |
7 tuş takımında |
KP_8 |
80 |
65431 |
8 tuş takımında |
KP_9 |
81 |
65434 |
9 tuş takımında |
KP_Add |
86 |
65451 |
+ tuş takımında |
KP_Begin |
84 |
65437 |
Tuş takımındaki orta tuş (5 ile aynı tuş) |
KP_Decimal |
91 |
65439 |
. Tuş takımındaki ondalık sayı ( ) |
KP_Delete |
91 |
65439 |
tuş takımında sil |
KP_Divide |
112 |
65455 |
/ tuş takımında |
KP_Down |
88 |
65433 |
↓ tuş takımında |
KP_End |
87 |
65436 |
tuş takımında sonlandır |
KP_Enter |
108 |
65421 |
tuş takımına girin |
KP_Home |
79 |
65429 |
tuş takımında ev |
KP_Insert |
90 |
65438 |
tuş takımına yerleştirin |
KP_Left |
83 |
65430 |
← tuş takımında |
KP_Multiply |
63 |
65450 |
× tuş takımında |
KP_Next |
89 |
65435 |
Tuş takımında PageDown |
KP_Prior |
81 |
65434 |
Tuş takımında PageUp |
KP_Right |
85 |
65432 |
→ tuş takımında |
KP_Subtract |
82 |
65453 |
- tuş takımında |
KP_Up |
80 |
65431 |
↑ tuş takımında |
Next |
105 |
65366 |
Sayfa Aşağı |
Num_Lock |
77 |
65407 |
Rakam kilidi |
Pause |
110 |
65299 |
Duraklat |
Print |
111 |
65377 |
PrintScrn |
Prior |
99 |
65365 |
Sayfa yukarı |
Return |
36 |
65293 |
Giriş anahtarı |
Right |
102 |
65363 |
→ |
Scroll_Lock |
78 |
65300 |
Kaydırma kilidi |
Shift_L |
50 |
65505 |
Sol taraftaki kaydırma tuşu |
Shift_R |
62 |
65506 |
Sağ üst karakter tuşu |
Tab |
23 |
65289 |
Sekme tuşu |
Olayları kök pencereye bağlama
Şu ana kadar bir olayı belirli bir widget'a nasıl bağlayacağınızı öğrendiniz. Tkinter ayrıca bir olayı üst düzey pencereye bağlamanıza da olanak tanır.
Bu durumda, the'nin sözdizimi bind()
aynıdır, ancak onu kök pencerede şu şekilde çağırabilirsiniz:
root.bind('<Return>', handler)
Kod dili: HTML, XML ( xml )
Bağlanma seviyeleri
Önceki örnekte, bir olayı bir widget'ın belirli bir örneğine nasıl bağlayacağınızı öğrendiniz. Buna örnek düzeyinde bağlama denir .
Tkinter ayrıca bir olayı bir widget'ın tüm örneklerine bağlamanıza da olanak tanır. Örneğin, olayı bir programdaki tüm metin kutularına bağlayabilirsiniz:
root.bind_class('Entry', '<Control-V>', paste)
Kod dili: JavaScript ( javascript )
Bu arada, Entry
Tkinter'da bir metin kutusu oluşturmak için widget'ı kullanıyorsunuz.
Olayı bir örnek yerine bir sınıfa bağladığınız için buna sınıf düzeyinde bağlama denir .
Olayların bağlantısını kaldırma
Bazen daha önceki bir bağlamanın etkisini geri almak isteyebilirsiniz. Bunu yapmak için şu yöntemi kullanabilirsiniz unbind()
:
widget.unbind(event)
Kod dili: CSS ( css )
Aşağıdaki örnek, olayın düğmeyle olan bağlantısını kaldırır btn
:
btn.unbind('<Return>')
Kod dili: HTML, XML ( xml )
Özet
bind()
Bir olayı bir widget'a bağlamak için yöntemi kullanın .- Tkinter hem örnek düzeyinde hem de sınıf düzeyinde bağlamaları destekler.
Kaynak