Python 3.x 试图将StringVar的内容写入文件的代码无效

Python 3.x 试图将StringVar的内容写入文件的代码无效,python-3.x,tkinter,Python 3.x,Tkinter,我有很多基本编程的经验,但没有GUI编程的经验,为此我正在自学Python3和tkinter。通过检查stackoverflow帖子,我得到了一些很好的答案,但现在我遇到了一个似乎还没有解决的问题。我想让我的程序从条目小部件获取用户输入,并将数据写入文件。去掉所有不重要的行后,我当前的代码是 from tkinter import * from tkinter import ttk root = Tk() sheetid = StringVar() def finish(): wi

我有很多基本编程的经验,但没有GUI编程的经验,为此我正在自学Python3和tkinter。通过检查stackoverflow帖子,我得到了一些很好的答案,但现在我遇到了一个似乎还没有解决的问题。我想让我的程序从条目小部件获取用户输入,并将数据写入文件。去掉所有不重要的行后,我当前的代码是

from tkinter import *
from tkinter import ttk

root = Tk()

sheetid = StringVar()

def finish():
    with open('C:/Python33/data.txt', 'w') as f:
        f.write('first line of text\n')
    with open('C:/Python33/data.txt', 'a') as f:
        f.write(sheetid)

main = Frame(root).grid()
ttk.Entry(main, textvariable="sheetid").grid(row=0, column=1)
ttk.Button(main, text="Close", command=finish).grid(column=1)

root.mainloop()
我以前使用标签小部件在窗口中写入变量“sheetid”,因此我知道输入小部件和“关闭”按钮小部件的组合正在工作。第一个write语句有效,因此我知道我的文件打开代码是正确的。第二次写入会导致运行时错误:

TypeError:必须是str,而不是StringVar

接下来,我尝试使用

s = str(sheetid,'\n')
但这也返回了一个运行时错误:

TypeError:强制到str:需要字节、bytearray或类似缓冲区的对象,找到StringVar

当然有办法做到这一点,但我的谷歌搜索没有找到它


谢谢

不能使用
..,textvariable=“sheetid”
,必须使用
..,textvariable=sheetid,
(请注意
sheetid周围缺少引号)。然后,当您要写出值时,必须使用
sheetid.get()

不能使用
..,textvariable=“sheetid”
,必须使用
..,textvariable=sheetid,
(请注意
sheetid周围缺少引号)。然后,当您要写出值时,必须使用
sheetid.get()

谢谢,布莱恩。这确实解决了问题。我认为引号没有任何意义。问题是我不得不添加它们来修复我在本文代码中遗漏的一个早期问题。下面是这个问题的简化版本:对不起,我把盒子弄乱了。在我的另一段代码中,在一个窗口的条目小部件中设置了两个变量。该窗口中的“关闭”按钮将打开一个新窗口,其中包含标签小部件中的这些变量。如果没有引号标记,它们就无法在新窗口中正确复制。@Glennleder:我不太理解你写的内容,但是相信我,使用引号作为textvariable不是正确的方法。
textvariable
属性的值必须是Tkinter变量类之一的实例。谢谢,@Bryan。这确实解决了问题。我认为引号没有任何意义。问题是我不得不添加它们来修复我在本文代码中遗漏的一个早期问题。下面是这个问题的简化版本:对不起,我把盒子弄乱了。在我的另一段代码中,在一个窗口的条目小部件中设置了两个变量。该窗口中的“关闭”按钮将打开一个新窗口,其中包含标签小部件中的这些变量。如果没有引号标记,它们就无法在新窗口中正确复制。@Glennleder:我不太理解你写的内容,但是相信我,使用引号作为textvariable不是正确的方法。
textvariable
属性的值必须是Tkinter变量类之一的实例。