python - 输入文本选项 : curious behavior

标签 python tkinter

考虑以下代码:

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

该动画显示,文本内容是相互连接的:一个条目中的更改会自动更新另一个条目。请注意,文本选项不绑定(bind)到任何 stringVar 对象,而是绑定(bind)到字符串文字

奇怪的是,如果文本选项被初始化为不同文字字符串,例如“hi and Hi”,条目内容就会变得无关。

这是预期的行为吗?

[编辑]:添加对这种奇怪行为的描述:

对于三个条目,具有相同文本的两个条目也被链接:

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()

最佳答案

问题实际上在于 text 参数。通过传递 text,您将创建 Entry 小部件的 textvariable:

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 作为参数传递即可。我认为你根本不需要它。

关于python - 输入文本选项 : curious behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440526/

相关文章:

python - pyopencl array sum 添加数组

python - 使用 python curses 逐页滚动或逐行滚动

python - "TypeError: Can' t 将 'NoneType' 对象隐式转换为 str"当 var 应该有一个值时

python - 最大每月值,同时保留该值发生时的数据

python - 在函数式编程风格中具有容量限制的子元组中拆分 python 元组

python - 如何使用 NLTK 在 python 中获取句子列表的通用标记模式

python - 如果文本改变了 the 的大小并且 widget 改变了大小

python - 如何通过单击按钮重新启动 tkinter/python 程序?

python - tkinter Python 中的按钮位置(网格)

python - 在 Tkinter Gui 中创建框架类