我在基础编程方面有很多经验,但没有GUI编程经验,而且为了这个目的,我正在用tkinter自学Python 3 . 我通过检查stackoverflow帖子得到了一些很好的答案,但现在我遇到了一个似乎没有被覆盖的问题 . 我希望我的程序从Entry小部件获取用户输入并将该数据写入文件 . 在删除所有不必要的行之后,我当前的代码是
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()
我之前使用Label小部件在窗口中编写变量“sheetid”,因此我知道Entry小部件和“Close”Button小部件的组合正在运行 . 第一个写语句有效,所以我知道我的文件打开代码是正确的 . 第二次写操作会产生运行时错误:
TypeError:必须是str,而不是StringVar .
接下来我尝试将“sheetid”转换为字符串,使用
s = str(sheetid,'\n')
但是这也返回了一个运行时错误:
TypeError:强制转换为str:需要字节,字节数组或缓冲区对象,找到StringVar .
当然有一种方法可以做到这一点,但我的谷歌搜索还没有找到它 .
谢谢!
1 回答
你不能使用
..., textvariable="sheetid"
,你必须使用..., textvariable=sheetid, ...
(注意sheetid
周围缺少引号) . 然后,当您想要写出值时,必须使用sheetid.get()
.