我正在尝试将单选按钮中的选定值发送到.docx
文件中
导入我需要的内容,重点是docx
import tkinter as tk
from docx import Document
main = tk.Tk()
这些是我需要放在表格左侧的word文档中的选项,它们在调查中充当问题。
info = ["option 1", "option 2", "option 3", "option 4"
]
在这里,我要放置一个名为Yes, No & N/A
的单选按钮,它是左侧选项(上面info
的列表)的答案,也是Label
代表选项或其他问题的答案。
vars = []
for idx,i in enumerate(info):
var = tk.IntVar(value=0)
vars.append(var)
lblOption = tk.Label(main,text=i)
btnYes = tk.Radiobutton(main, text="Yes", variable=var, value=2)
btnNo = tk.Radiobutton(main, text="No", variable=var, value=1)
btnNa = tk.Radiobutton(main, text="N/A", variable=var,value=0)
lblOption.grid(column=0,row=idx)
btnYes.grid(column=1,row=idx)
btnNo.grid(column=2,row=idx)
btnNa.grid(column=3,row=idx)
这是我的职责,创建文档和保存是容易的部分。我的问题是我很困惑地创建一个将具有的表;顶部(从info
到左侧的选项是标题(请参见RadioButtons yes, no, & N/a
)。以选定的数据为例,例如,如果对于option 1
,我选择了No,则将数据保存到.docx
文件中,并选择一个(请参见页面底部的所需输出)
def send():
document = Document()
section = document.sections[0]
#add table
table = document.add_table(1, 4)
#style table
table.style = 'Table Grid'
#table data retrived from Radiobuttons
items = vars.get()
#populate header row
heading_cells = table.rows[0].cells
heading_cells[0].text = "Options"
heading_cells[1].text = btnYes.cget("text")
heading_cells[2].text = btnNo.cget("text")
heading_cells[3].text = btnNa.cget("text")
for item in items:
cells = table.add_row().cells
cells[0].text = #Options
cells[1].text = #Yes values
cells[2].text = #No values
cells[3].text = #N/A values
#save doc
document.save("test.docx")
#button to send data to docx file
btn = tk.Button(main, text="Send to File", command= send)
btn.grid()
main.mainloop()
这就是它打开的内容:
这是所需的输出:
数字1
代表从tkinter应用程序中选择的项目。但是会弄清楚如何将其更改为复选框。
我有点困惑,我是docx的新手..一直在尝试阅读documentation ..这是我在自我中钻研的地方。
答案 0 :(得分:1)
在您当前的代码中,vars
是IntVar
的列表。您要单独获取每个值,而不要获取vars.get()
。同样,在写入docx文件时,您同时需要info
和单选按钮的值,要跟踪它们,都可以使用索引。
只需对代码进行最少的更改,就可以使用类似的内容。
def send():
...
...
heading_cells[3].text = btnNa.cget("text")
for idx, item in enumerate(vars):
cells = table.add_row().cells
cells[0].text = info[idx] # gets the option name
val = item.get() #radiobutton value
if val == 2: # checks if yes
cells[1].text = "1"
elif val == 1: # checks if no
cells[2].text = "1"
elif val == 0: # checks if N/A
cells[3].text = "1"
#save doc
document.save("test.docx")
,或者您可以使用字典将单选按钮映射到单元格。
valuesCells = {0: 3, 1: 2, 2: 1} # value of radiobutton: cell to write
# hard to read what's going on though
for idx, item in enumerate(vars):
cells = table.add_row().cells
cells[0].text = info[idx] # gets the option name
val = item.get()
cells[valuesCells[val]].text = "1"
#save doc
document.save("test.docx")