Python StringVar()作为abc=';123456779';

Python StringVar()作为abc=';123456779';,python,tkinter,Python,Tkinter,这真的不应该那么难。除非我忽略了什么。我一直在兜圈子,试图让tkinter接受一个条目(根)作为字符串。如果我将变量定义为 abc='123456789' 代码运行 如果我试图使abc=label_文本成为函数的结果,我会得到错误 StringVar对象不可编辑 如何使函数对象像已定义的字符串一样工作 谢谢 #odd series import tkinter as tk root = tk.Tk() odd=0 n=2 abc='1234567' def show_text(): la

这真的不应该那么难。除非我忽略了什么。我一直在兜圈子,试图让tkinter接受一个条目(根)作为字符串。如果我将变量定义为

abc='123456789'

代码运行

如果我试图使abc=label_文本成为函数的结果,我会得到错误

StringVar对象不可编辑

如何使函数对象像已定义的字符串一样工作

谢谢

#odd series
import tkinter as tk
root = tk.Tk()
odd=0
n=2
abc='1234567'
def show_text():
    label_text.set( entry_text.get())
entry_text = tk.StringVar()
entry = tk.Entry(root, width=12, textvariable=entry_text)
entry.pack()

button = tk.Button(root,text="Run add", command=show_text)
button.pack()


label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()

#Add odd
for i,x in enumerate(label_text):
    if i % n == 0:
        odd=odd+int(x)

label2=tk.StringVar()       
label2=tk.Label(root,text=odd)
label2.pack()

root.mainloop()

label_text是一个tk.StringVar对象。您需要调用.get()来获取它所表示的字符串

#Add odd
for i,x in enumerate(label_text.get()):
    if i % n == 0:
        odd=odd+int(x)
标签保留text=,因为当条目为空时,for循环只计算一次,因此其长度为0

如果要使用此长度更新第二个标签,则会遇到另一个问题
odd
是一个python变量,而不是tkinter变量对象,它具有通知监听器的绑定,如tkinter标签。你有几个选择。您可以将事件绑定到条目,使用条目的验证功能(稍微复杂一些),或者在单击按钮时进行更新,如下所示

odd = tk.IntVar(root)

#Add odd
for i,x in enumerate(label_text.get()):
    if i % n == 0:
        odd.set(odd.get()+int(x))

label2=tk.Label(root, textvariable=odd)
label2.pack()
这将把“odd”的值与“label2”的显示联系起来,但是for循环在初始化之前仍然只运行一次。要解决此问题,您需要在按下按钮时重新评估:

def calc_length():
    for i,x in enumerate(label_text.get()):
        if i % n == 0:
            odd.set(odd.get()+int(x))

def show_text():
    label_text.set(entry_text.get())
    calc_length()



entry_text = tk.StringVar()
entry = tk.Entry(root, width=12, textvariable=entry_text)
entry.pack()

button = tk.Button(root,text="Run add", command=show_text)
button.pack()


label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()

odd = tk.IntVar(root)

label_text是一个tk.StringVar对象。您需要调用.get()来获取它所表示的字符串

#Add odd
for i,x in enumerate(label_text.get()):
    if i % n == 0:
        odd=odd+int(x)
标签保留text=,因为当条目为空时,for循环只计算一次,因此其长度为0

如果要使用此长度更新第二个标签,则会遇到另一个问题
odd
是一个python变量,而不是tkinter变量对象,它具有通知监听器的绑定,如tkinter标签。你有几个选择。您可以将事件绑定到条目,使用条目的验证功能(稍微复杂一些),或者在单击按钮时进行更新,如下所示

odd = tk.IntVar(root)

#Add odd
for i,x in enumerate(label_text.get()):
    if i % n == 0:
        odd.set(odd.get()+int(x))

label2=tk.Label(root, textvariable=odd)
label2.pack()
这将把“odd”的值与“label2”的显示联系起来,但是for循环在初始化之前仍然只运行一次。要解决此问题,您需要在按下按钮时重新评估:

def calc_length():
    for i,x in enumerate(label_text.get()):
        if i % n == 0:
            odd.set(odd.get()+int(x))

def show_text():
    label_text.set(entry_text.get())
    calc_length()



entry_text = tk.StringVar()
entry = tk.Entry(root, width=12, textvariable=entry_text)
entry.pack()

button = tk.Button(root,text="Run add", command=show_text)
button.pack()


label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()

odd = tk.IntVar(root)

丹尼尔B。。我改为enumerate(label_text.get()),但当我按下按钮时,odd显示0并保持为0。我已更新了我的回答以解决该问题,尽管它实际上应该是一个单独的问题。我完全不懂tkinter。谢谢你的时间和帮助。如果答案令人满意,你能接受吗?如果不是,你还有什么问题吗?丹尼尔B。。我改为enumerate(label_text.get()),但当我按下按钮时,odd显示0并保持为0。我已更新了我的回答以解决该问题,尽管它实际上应该是一个单独的问题。我完全不懂tkinter。谢谢你的时间和帮助。如果答案令人满意,你能接受吗?如果没有,你还有什么问题?