Что значит .! (восклицательный знак точка) означает в python? - PullRequest
0 голосов
/ 29 мая 2020

Я написал следующую программу:

from tkinter import *

root = Tk()

temp = None
def changeColor(event, e):
    # print('Positional arumgent passed:', x)
    print('event: ', event.widget)
    e2 = event.widget
    if e2['bg'] == 'white':
        e2['bg'] = 'black'
    elif e2['bg'] == 'black':
        e2['bg'] = 'white'
    global temp
    temp = event

entries = [[None for i in range(3)] for j in range(3)]

for y in range(3):
    for x in range(3):
        e = Entry(root, width=3, bg='white', bd=0, borderwidth=3)
        e.bind('<Double-Button-1>', lambda x: changeColor(x, e))
        e.grid(column=x, row=y)
        entries[y][x] = e

root.mainloop()

, которая в терминале произвела вывод,

event:  .!entry5
event:  .!entry6
event:  .!entry8
...

Когда я изучил один из event.widgets (хранящийся в temp) в терминале, я получил:

>>> temp.widget
<tkinter.Entry object .!entry8>
>>> print(temp.widget)
.!entry8

Я никогда раньше не видел этот синтаксис, и мне не удалось найти что-либо в документации или здесь, в stackoverflow, об этом.

Кто-нибудь знает что это? Не могли бы вы объяснить / описать?

1 Ответ

2 голосов
/ 29 мая 2020

.! - это не общая Python вещь, это просто то, как библиотека tkinter называет виджеты, которым иначе не дается имя. entry происходит отсюда , поскольку этот виджет является классом Entry. Восклицательный знак и суффикс номера назначаются , здесь , предположительно, !, чтобы автоматически сгенерированные имена виджетов, производные от имени класса, не перекрывались с именами, назначенными пользователем. И ведущая точка - это то, как виджеты называются, если у них нет именованного родителя; если бы они это сделали, это было бы <parentname>.<childname>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...