python - tutorial - tkinter شرح




كيفية الحصول على اسم القطعة في الحدث (2)

from tkinter import *

main = Tk()

def flipper(event):

    # I'd like to do this:
    #if widgetname == switcher:
        #do stuff
    #if widgetname == switcher1:
        #do stuff
    return

switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("<Button-1>", flipper)


switcher1 = Label(main, bg='white', text="click here", font="-weight bold")
switcher1.grid()
switcher1.bind("<Button-1>", flipper)

switcher2 = Label(main, bg='white', text="click here", font="-weight bold")
switcher2.grid()
switcher2.bind("<Button-1>", flipper)

switcher3 = Label(main, bg='white', text="click here", font="-weight bold")
switcher3.grid()
switcher3.bind("<Button-1>", flipper)

switcher4 = Label(main, bg='white', text="click here", font="-weight bold")
switcher4.grid()
switcher4.bind("<Button-1>", flipper)

switcher5 = Label(main, bg='white', text="click here", font="-weight bold")
switcher5.grid()
switcher5.bind("<Button-1>", flipper)


main.mainloop()

في بلدي وظيفة الحدث أود أن تفعل أشياء مختلفة على أساس التسمية التي يتم النقر عليها. ما إم الحيرة على هو أنني لا يمكن إلا الحصول على رقم معرف القطعة التي يتم النقر عليها، وليس الاسم. إذا كان يمكنني الحصول على معرف لجميع الحاجيات بلدي ثم يمكن أن أفعل:

def flipper(event):
    if event.widget == switcher.identifier():
           do stuff

ولكن لا أستطيع العثور على كيفية الحصول على معرف القطعة المحددة إما ...

كيف يمكنني الحصول على اسم الأداة من خلال معرفها (event.widget ())؟

أو كيف يمكنني الحصول على معرف اسم عنصر واجهة مستخدم محدد؟

إذا لم يكن ممكنا ثم أود أن تجعل وظيفة مختلفة وربط لكل التسمية التي هي الكثير من العمل الذي نأمل ليس ضروريا.

تصحيح:

from tkinter import *

main = Tk()

def flipper(event, switch):
    if switch.widget == 's1':
        print("got it")

switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("<Button-1>", flipper)
switcher.widget = 's1'


main.mainloop()

سريعة وقذرة - هل يمكن أن يكون وظيفة تحقق سمة الجلاد.

def flipper(event, switch):
    if switch.widget == 's1':
        do_stuff
        return stuff
    if switch.widget == 's2':
        do_stuff
        return stuff

switcher1.widget = 's1'
switcher2.widget = 's2'

لا يمكنك الحصول على اسم المتغير الذي يتم تعيين القطعة إلى، التي من شأنها أن تكون عديمة الفائدة نسبيا. يمكن تعيين أداة إلى أكثر من متغير واحد، أو لا شيء على الإطلاق.

الحصول على نص التسمية

لديك حق الوصول إلى القطعة الفعلية، ويمكنك استخدام ذلك للحصول على النص الموجود على الملصق. يوضح المثال أن جميع التصنيفات هي نفسها، لذا قد لا يكون ذلك مفيدا لك:

def flipper(event):
    print("label text:", event.widget.cget("text"))

استخدام اسم عنصر واجهة مستخدم مخصص

يمكنك أيضا إعطاء القطعة اسم. لا يمكنك العودة على وجه التحديد الاسم، ولكن يمكنك أن تأتي قريبة جدا. على سبيل المثال، إذا أنشأت تصنيفا كهذا:

switcher = Label(main, name="switcher", bg='white', text="click here", font="-weight bold")

يمكنك الحصول على تمثيل سلسلة من القطعة عن طريق تقسيم على "." وأخذ القيمة الأخيرة:

def flipper(event):
    print("widget name:", str(event.widget).split(".")[-1])

تمرير اسم عبر الربط

وأخيرا، يمكنك إعداد الروابط الخاصة بك بحيث يتم إرسال الاسم إلى وظيفة:

switcher.bind("<Button-1>", lambda event: flipper(event, "switcher"))
switcher1.bind("<Button-1>", lambda event: flipper(event, "switcher1"))




widget