写文件有问题,直到我关闭Tkinter Python 3示例代码的程序,文件才被写

2024-04-19 06:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑: 是的,我有一个类似的问题作为下面的链接,但我不认为这是一个重复的问题,因为不幸的是,答案不能解决我的问题。How come a file doesn't get written until I stop the program?

我试过f=open(file,w)f.close()f.flush()os.fsync(f)但没用。还请注意,我使用的with语句应该完成与Python从with块退出时自动关闭文件相同的事情。你知道吗

即使是所有的文件在我关闭程序之前还是无法写入。你知道吗

我现在还注意到,这并不是我第一次想到的Tkinter问题,这个问题存在于没有tkintergui的情况下。可能与lxml.etree有关

下面是原始问题

我尝试为XML转换器脚本制作一个简单的GUI。你知道吗

我在保存文件时遇到问题。在关闭或销毁Tkinter程序之前,文件不会被写入。有人能解释为什么会发生这种情况以及如何解决吗?我想在Tkinter窗口运行时写入文件。你知道吗

请查看以下代码:

from tkinter import *
import lxml.etree as ET
import tkinter.filedialog as fdialog

def mfileopen():
    global xml_file
    xml_file = fdialog.askopenfile()
    Label(text=xml_file) .pack()

def dropdown_select(selection):
    global xslt_file
    if selection == "Stylesheet 1":
        xslt_file = "stylesheet1.xsl"

    elif selection == "Stylesheet 2":
        xslt_file = "stylesheet2.xsl"

def convert_xml(xslt_file, input_xml):
    dom = ET.parse(input_xml)
    xslt = ET.parse(xslt_file)
    transform = ET.XSLT(xslt)
    newdom = transform(dom)
    write_file(newdom)

def write_file(csv_file):
    with open("output.csv", "w") as f:
        f.write(str(csv_file))

OPTIONS = [
"Stylesheet 1",
"Stylesheet 2",
]

master = Tk()

Label (text="Open XML file and then Choose XSLT Code from the dorpdown menu and press Load XSLT. Finally press Convert XML") .pack()

button = Button(text="Open XML File", width=30, command=mfileopen)
button.pack()

variable = StringVar(master)
variable.set(OPTIONS[0]) # default value

w = OptionMenu(master, variable, *OPTIONS)
w.pack()

button = Button(master, text="Load XSLT", command=lambda: dropdown_select(variable.get()))
button.pack()

button = Button(master, text="Convert XML", command=lambda: convert_xml(xslt_file, xml_file))
button.pack()

master.mainloop()

Tags: 文件textmasterdefwithbuttonxmlvariable
1条回答
网友
1楼 · 发布于 2024-04-19 06:38:32

您需要f.close()将文件写入缓冲区刷新到文件中。或者在您的例子中,您可能只想执行f.flush(); os.fsync();,这样就可以继续使用打开的文件句柄进行循环。你知道吗

别忘了import os。你知道吗

更多信息:How come a file doesn't get written until I stop the program?

相关问题 更多 >