我已经构建了一个GUI,其中如果按下按钮,则函数的输出进入文本框。现在我想通过将内容写入文本文件来创建报告。
文本框的内容是:
Checks Status Remarks
ECHConnect checked Structure disintegrates
ECHQUALITY checked All 171665 elements are suitable
ECHPenetra checked EChPenet: 26093 elements penetrate/touch each other
ECHCha not checked
ECHCoincid checked 20 coincident elements
ECHEdgeLen checked Shortest edge length = 0.2669
有没有命令可以做到?
代码如下:
#!/usr/bin/python
import Tkinter as tk
from tkFileDialog import *
import re
class StageGui:
prot=0
log=0
def __init__(self,parent,tex):
self.tex=tex
self.f = tk.Frame(main, width=500, height=500)
self.b1=tk.Button(main,text='Import prot file',command=self.callback).pack(side='left',anchor='nw')
self.b2=tk.Button(main,text='Import log file',command=self.callback1).pack(side='left',anchor='nw')
self.xf = tk.Frame(self.f,relief='groove', borderwidth=2)
self.button=tk.Button(self.xf, text="CHECK",command=self.check).pack(side='left', padx=5,pady=8)
self.button2=tk.Button(self.xf, text="SUMMARY",command=summary).pack(side='left', padx=5,pady=8)
self.button3=tk.Button(self.xf, text="INERTIA",command=inertia).pack(side='left', padx=5,pady=8)
self.button1=tk.Button(self.xf, text="CREATE REPORT").pack(side='left', padx=5,pady=8)
self.xf.place(relx=0.01, rely=0.35, anchor='nw')
self.label1=tk.Label(self.f, text='standard checks').place(relx=.06, rely=0.35,anchor='w')
self.f.pack(side='left',fill='y',expand=1)
def callback(self):
name= askopenfilename()
StageGui.prot=name
self.printstatements(StageGui.prot)
def printstatements(self,name):
self.tex.insert('end','\nthe file has been imported \n')
s='the path of the imported file is {}\n'.format(name)
self.tex.insert('end',s)
self.tex.see(tk.END)
return
def callback1(self):
name1= askopenfilename()
StageGui.log=name1
self.printstatements(StageGui.log)
def check(self):
file=open(StageGui.prot,'r')
a,b,c='Checks','Status','Remarks'
mess='\n{0:10s} \t {1:10s} \t {2:100s}\n'.format(a,b,c)
self.tex.insert('end',mess)
count_string_occurance(file)
def count_string_occurance(file):
string = "test"
f = file
contents = f.read()
commcheck=['ECHConnect','ECHQUALITY','ECHPenetra','ECHCha','ECHCoincid','ECHEdgeLen','EMSameNorm','EEBeam','NEQ','Outline','NCHeck_nodes','GDelete']
remcheck=['Label','INERTIA','Summary']
special=['ECht']
s='ECht'
num=[]
rnum=[]
snum=[]
for i in range(len(commcheck)):
string=commcheck[i]
num.append(contents.count(string))
s=['connected','elements are suitable','penetrations','minimum','coincident elements','Shortest','to be reoriented','modified according to','multiple nodes found','Free edges displayed in','nodes are displayed','missing']
p=['disintegrates','failed','touch','maximum','no coincident elements','Longest','reoriented','linked','multiple nodes found','free','nodes are displayed','elements deleted']
for i in range(len(num)):
if num[i]>0:
status='checked'
with open(StageGui.log,'r') as fy:
for line in fy:
if s[i] in line:
mess='\n{0:10s} \t {1:10s} \t {2:100s}\n'.format(commcheck[i],status,line)
tex.insert('end',mess)
break
elif p[i] in line:
mess= '\n{0:10s} \t {1:10s} \t {2:100s}\n'.format(commcheck[i],status,line)
tex.insert('end',mess)
else:
status='not checked'
new= '\n{0:10s} \t {1:10s} \t \n'.format(commcheck[i],status)
tex.insert('end',new)
for i in range(len(remcheck)):
nstring=remcheck[i]
rnum.append(contents.count(nstring))
for i in range(len(rnum)):
if rnum[i]>0:
status='checked'
mess='\n{0:10s} \t {1:10s} \t \n'.format(remcheck[i],status)
tex.insert('end',mess)
else:
status='not checked'
new= '\n{0:10s} \t {1:10s} \t \n'.format(remcheck[i],status)
tex.insert('end',new)
nstring1=special[0]
flag=0
if nstring1=='ECht':
searchstring='degenerated'
with open(StageGui.log,'r') as fz:
for line in fz:
if searchstring in line:
status='checked'
mess='\n{0:10s} \t {1:10s} \t {2:100s}\n'.format(nstring1,status,line)
tex.insert('end',mess)
flag=1
break
if flag==0:
status2='not checked'
mess2='\n{0:10s} \t {1:10s} \t \n'.format(nstring1,status2)
tex.insert('end',mess2)
f.close()
def summary():
tex.delete('1.0','end')
with open(StageGui.prot,'r') as input:
intable = False
for line in input:
if line.strip() == "Summary":
intable = True
if line.strip() == "* ============================== INERTIA ==============================":
intable = False
if intable and line.strip().startswith("*"):
z=(line.strip())
tex.insert('end','\n')
tex.insert('end',z)
tex.insert('end','\n')
def inertia():
tex.delete('1.0','end')
with open(StageGui.prot,'r') as input:
intable = False
for line in input:
if line.strip() == "* ============================== INERTIA ==============================":
intable = True
if line.strip() == "Summary":
intable = False
if intable and line.strip().startswith("*"):
z=(line.strip())
tex.insert('end','\n')
tex.insert('end',z)
tex.insert('end','\n')
main = tk.Tk()
tex= tk.Text(main,width=100)
tex.pack(side='bottom',anchor='s',fill='both',expand='yes')
stagegui=StageGui(main,tex)
main.title('prototype')
main.geometry('800x800+300+300')
main.mainloop()
答案 0 :(得分:1)
所以,基本上你可以采取两种方法:第一种,我通常更喜欢的方法,就是跟踪你写入窗口的值,并将它们分别写入窗口。以同样的方式提交文件。但是,如果你真的想从窗口阅读,那很简单:
outtext = tex.get('1.0', 'end')
outfile = open('whatever', 'w')
outfile.write(outtext)
outfile.close()