Опция ввода текста: любопытное поведение - PullRequest
2 голосов
/ 04 июня 2019

Рассмотрим следующий код:

import  tkinter as tk

FONT="Arial 20 bold"

app = tk.Tk()

tk.Entry(app,text="hi", font=FONT).pack()
tk.Entry(app,text="hi", font=FONT).pack()

app.mainloop()

animated view

Эта анимация показывает, что текстовое содержимое связано одно с другим: изменение в одной записи автоматически обновляет другую,Обратите внимание, что текстовые параметры не привязаны ни к какому объекту stringVar, а к строковому литералу .

Любопытно, если текстовые параметры инициализируются, например, в отдельную буквенную строку "Привет и Привет ", содержимое записи не связано.

Это ожидаемое поведение?

[править]: Дополнение к описанию этого странного поведения:

С тремя записямидва текста с одинаковым текстом также связаны между собой:

import  tkinter as tk

FONT="Arial 20 bold"

app = tk.Tk()

tk.Entry(app, text="hi", font=FONT).pack()
tk.Entry(app, text="there", font=FONT).pack()
tk.Entry(app, text="hi", font=FONT).pack()

app.mainloop()

Даже если эти записи назначены различным переменным:

import  tkinter as tk

FONT="Arial 20 bold"

app = tk.Tk()

a = tk.Entry(app, text="hi", font=FONT).pack()
b = tk.Entry(app, text="there", font=FONT).pack()
c = tk.Entry(app, text="hi", font=FONT).pack()

app.mainloop()

1 Ответ

4 голосов
/ 04 июня 2019

Проблема действительно связана с параметром text.Передав text, вы создаете textvariable виджета Entry:

import tkinter as tk

FONT="Arial 20 bold"

app = tk.Tk()

a = tk.Entry(app, text="hi", font=FONT)
b = tk.Entry(app, text="there", font=FONT)
c = tk.Entry(app, text="hi", font=FONT)

for i in (a,b,c):
    i.pack()
    print (i["textvariable"])

app.mainloop()

Чтобы решить эту проблему - просто не передавайте text в качестве параметра.Я не думаю, что вам все равно это нужно.

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