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 commandseç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_pressednası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 Returntuşa bastığınızda, Tkinter otomatik olarak return_pressedve logiş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_pressedlog

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, EntryTkinter'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

Yorumunuzu Ekleyin


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