استفاده از bind و event

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Nov 12, 2020

یک برنامه Tkinter بیشتر وقت خود را در داخل یک حلقه رویداد اجرا می کند ، که از طریق روش mainloop وارد می شود. این انتظار برای اتفاقات است. رویدادها می توانند فشارهای کلیدی یا عملکرد ماوس توسط کاربر باشند.

Tkinter مکانیزمی را فراهم می کند تا به برنامه نویس اجازه دهد با حوادث مقابله کند. برای هر ابزارک ، اتصال توابع و روش های پایتون به یک رویداد امکان پذیر است.

widget.bind(event, handler)

اگر رویداد تعریف شده در ویجت رخ دهد ، عملکرد "handler" با یک شی رویداد فراخوانی می شود. توصیف واقعه.

from tkinter import *

window = Tk()
window.title("icc-aria gui app")

def hello(event):
    print("Single Click, Button-l") 
def quit(event):                           
    print("Double Click, so let's stop") 
    window.quit() 

widget = Button(window, text='Mouse Clicks')
widget.pack()
widget.bind('<Button-1>', hello)
widget.bind('<Double-1>', quit)

window.geometry("300x300")
widget.mainloop()

خروجی:

بیایید یک مثال ساده دیگر داشته باشیم که نحوه استفاده از رویداد حرکت را نشان می دهد ، یعنی اگر ماوس به داخل یک ابزارک منتقل شود:

from tkinter import *

def motion(event):
  print("Mouse position: (%s %s)" % (event.x, event.y))
  return

window = Tk()

test_txt = "Intelligent Communication Control of Aria\nICC-Aria"
msg = Message(window, text = test_txt)
msg.config(bg='lightgreen', font=('times', 24, 'italic'))
msg.bind('<Motion>',motion)
msg.pack()

window.mainloop()

خروجی:

هر بار که ماوس را در ابزارک Message حرکت می دهیم ، موقعیت نشانگر ماوس چاپ می شود. وقتی این ابزارک را ترک می کنیم ، دیگر عملکرد تابع () فراخوانی نمی شود.

 

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
8دیدگاه
  • محسن م
    1 year, 5 months ago

    سلام استاد دوره ها عالی بودن واقعا تشکر.
    آیا از این به بعد ویدیو نمیزارین؟

    • علی بیگدلی
      1 year, 5 months ago

      برنامه نویسی شروع بی پایانه قطعا میگذارم ولی با تاخیر

  • علی باقری
    1 year, 8 months ago

    سلام
    نحوه حل مشکل خطای زیر رو لطفا راهنمایی نمایید.
    can't invoke "event" command: application has been destroyed
    while executing
    "event generate $w <<ThemeChanged>>"
    (procedure "ttk::ThemeChanged" line 6)
    invoked from within
    "ttk::ThemeChanged"
    قبلا برنامه درست کار می کرد یهو پیش اومد خط 6 هم که اشاره کرده یه کامنته

    • علی بیگدلی
      1 year, 8 months ago

      احتمالا توی یکی از ورودی هایی که به event میاد مقداری هستش که منطقی نیست

    • علی باقری
      1 year, 8 months ago

      برنامه تقریبا یک ماهه که داره کار میکنه و هیچ دستکاری هم نشده بود و این خطا ظاهر شد و همیشه هم نیست مثلا دفعه قبل 7 بار بدون خطا اجرا شد و کار کرد و بعد از اون یدفعه با اجرای برنامه در بار هشتم این خطا در همون شروع برنامه اومد و وقتی برنامه رو بستم و دوباره اجرا کردم دیگه نیومد

    • علی بیگدلی
      1 year, 8 months ago

      می تونین سورس رو بفرستید یا نه؟ اگر نه باید توضیحات بیشتری بدید البته اینجا نه

  • نریمان آریانژاد
    1 year, 10 months ago

    چرا فیلم نداره

    • علی بیگدلی
      1 year, 10 months ago

      چون فرصتش پیش نیومده بگیرم