【问题标题】:Code not working trying to write the content of a StringVar to a file代码无法尝试将 StringVar 的内容写入文件
【发布时间】:2013-05-05 02:30:11
【问题描述】:

我有很多基本编程经验,但没有 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()

我以前使用标签小部件在窗口中写入变量“sheetid”,所以我知道条目小部件和“关闭”按钮小部件的组合正在工作。第一个 write 语句有效,所以我知道我的文件打开代码是正确的。第二次写入给出了运行时错误:

TypeError: 必须是 str,而不是 StringVar。

接下来我尝试将“sheetid”转换为字符串,使用

s = str(sheetid,'\n')

但这也返回了运行时错误:

TypeError: coercing to str: need bytes, bytearray or buffer-like object, StringVar found.

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

谢谢!

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    你不能使用..., textvariable="sheetid",你必须使用..., textvariable=sheetid, ...(注意sheetid周围没有引号)。然后,当你想写出值时,你必须使用sheetid.get()

    【讨论】:

    • 谢谢,@Bryan。这确实解决了问题。我认为引号没有任何意义。问题是我必须添加它们来解决我在这篇文章的代码中省略的早期问题。这是该问题的简化版本:
    • 抱歉——我把盒子弄乱了。在我的其他代码中,在一个窗口的 Entry 小部件中设置了两个变量。该窗口中的“关闭”按钮会打开一个新窗口,其中包含标签小部件中的这些变量。如果没有引号,它们将无法在新窗口中正确复制。
    • @GlennLedder:我不太明白您写的内容,但请相信我,对文本变量使用引号并不是使用文本变量的正确方法。 textvariable 属性的值必须是 Tkinter 变量类之一的实例。
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2021-08-15
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多