输入Tkinter,.get(),字典中的所有数据,在xml中插入utf-8值
Input Tkinter, .get(), all data in dictionary, insert utf-8 value in xml
我是 Whosebug 和 python 编程的新手。我想开发一个程序,从 Tkinter 构建界面获取一些数据,当发送数据时,在我决定的直接标记上的 xml 文件中输入数据。
直接在控制台中打印时,一切正常,除非输出在字典中。但即使我只尝试使用一个变量,并且在控制台中输出仍然正常,当我在 xml 中插入文本时,我丢失了我的字符“čžš...”。它还会破坏 xml 中以前存在的所有其他字符。
现在我的代码是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
def main():
window = Tk()
name_l = Label(window, text=" Ime: ")
name_l.grid(row=2, column=0)
name = Entry(window)
name.grid(row=2, column=1)
# seznam uspehov na spričevalu
uspeh_list = ["izberi", "odličen"]
selected_uspeh = StringVar()
selected_uspeh.set(uspeh_list[0])
uspeh = Label(window, text=" Uspeh: ")
uspeh.grid(row=5, column=0, sticky=E)
uspeh_menu = OptionMenu(window, selected_uspeh, *uspeh_list)
uspeh_menu.grid(row=5, column=1)
def get_data():
name_dijak = name.get()
uspeh_dijak = selected_uspeh.get()
podatki_o_spricevalu = {"name": name_dijak, "uspeh":uspeh_dijak}
print podatki_o_spricevalu
return podatki_o_spricevalu
def make_xml():
podatki = get_data()
print ("Tole so podatki v obliki dictionary:")
print podatki
# odpremo pravo xml datoteko
import xml.etree.ElementTree as ET
with open('primer.xml','r') as tree_file:
tree = ET.parse(tree_file)
root = tree.getroot()
name = root[0][1].text
root[0][1].text = podatki["name"]
uspeh = root[0][4].text
root[0][4].text = podatki["uspeh"]
tree.write('primer_out.xml')
print root[0][1].text
# gumb naredi xml
Label(window, text="Make xml:", ).grid(row=20, column=0, sticky=E)
Button(window, text="XML ", width=14, command=make_xml).grid(
row=20, column=1, sticky=E)
window.mainloop()
if __name__ == "__main__":
main()
我尝试自己做几件事:
1. 我尝试使用另一台系统 windows 使用我们的语言的计算机,但失败了。
我在记事本中打开 vprasaj.py 并将其另存为 unicode、utf-8 和 ASCII,但都失败了。
我试着松开字典,尝试只用一个变量。在控制台中打印的所有命令都可以正常工作,但在 xml
中插入时却不行
在字典里我试着写 u"some text",我在某处看到它但不确定它是什么意思:S
我尝试了很多我不完全理解的事情。
所以,我需要的可能是一些指导,如何更改我的代码或。一些例子,关于如何从用户那里获取简单的文本并将其插入到预先编写的 xml 文件中,这样就不会丢失我的任何“čšž...”
感谢您花时间,即使只是阅读。正如我所说,我是编程新手,我可能无法遵循非常复杂的解决方案。我绝对会尝试。这是写得不好的代码,但我会一路完善它。
我找到了解决问题的办法。要使用“čžš”和其他字段传输名称,我只需要在输出文件中写入编码是什么:
tree.write('primer_out.xml', encoding="UTF-8")
它添加了 .xml 文件中的所有字母,这就是我所需要的。
感谢您的帮助。
我是 Whosebug 和 python 编程的新手。我想开发一个程序,从 Tkinter 构建界面获取一些数据,当发送数据时,在我决定的直接标记上的 xml 文件中输入数据。
直接在控制台中打印时,一切正常,除非输出在字典中。但即使我只尝试使用一个变量,并且在控制台中输出仍然正常,当我在 xml 中插入文本时,我丢失了我的字符“čžš...”。它还会破坏 xml 中以前存在的所有其他字符。
现在我的代码是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
def main():
window = Tk()
name_l = Label(window, text=" Ime: ")
name_l.grid(row=2, column=0)
name = Entry(window)
name.grid(row=2, column=1)
# seznam uspehov na spričevalu
uspeh_list = ["izberi", "odličen"]
selected_uspeh = StringVar()
selected_uspeh.set(uspeh_list[0])
uspeh = Label(window, text=" Uspeh: ")
uspeh.grid(row=5, column=0, sticky=E)
uspeh_menu = OptionMenu(window, selected_uspeh, *uspeh_list)
uspeh_menu.grid(row=5, column=1)
def get_data():
name_dijak = name.get()
uspeh_dijak = selected_uspeh.get()
podatki_o_spricevalu = {"name": name_dijak, "uspeh":uspeh_dijak}
print podatki_o_spricevalu
return podatki_o_spricevalu
def make_xml():
podatki = get_data()
print ("Tole so podatki v obliki dictionary:")
print podatki
# odpremo pravo xml datoteko
import xml.etree.ElementTree as ET
with open('primer.xml','r') as tree_file:
tree = ET.parse(tree_file)
root = tree.getroot()
name = root[0][1].text
root[0][1].text = podatki["name"]
uspeh = root[0][4].text
root[0][4].text = podatki["uspeh"]
tree.write('primer_out.xml')
print root[0][1].text
# gumb naredi xml
Label(window, text="Make xml:", ).grid(row=20, column=0, sticky=E)
Button(window, text="XML ", width=14, command=make_xml).grid(
row=20, column=1, sticky=E)
window.mainloop()
if __name__ == "__main__":
main()
我尝试自己做几件事: 1. 我尝试使用另一台系统 windows 使用我们的语言的计算机,但失败了。
我在记事本中打开 vprasaj.py 并将其另存为 unicode、utf-8 和 ASCII,但都失败了。
我试着松开字典,尝试只用一个变量。在控制台中打印的所有命令都可以正常工作,但在 xml
中插入时却不行
在字典里我试着写 u"some text",我在某处看到它但不确定它是什么意思:S
我尝试了很多我不完全理解的事情。
所以,我需要的可能是一些指导,如何更改我的代码或。一些例子,关于如何从用户那里获取简单的文本并将其插入到预先编写的 xml 文件中,这样就不会丢失我的任何“čšž...”
感谢您花时间,即使只是阅读。正如我所说,我是编程新手,我可能无法遵循非常复杂的解决方案。我绝对会尝试。这是写得不好的代码,但我会一路完善它。
我找到了解决问题的办法。要使用“čžš”和其他字段传输名称,我只需要在输出文件中写入编码是什么:
tree.write('primer_out.xml', encoding="UTF-8")
它添加了 .xml 文件中的所有字母,这就是我所需要的。
感谢您的帮助。