![](/img/trans.png)
[英]How can I get rid of unnecessary paths being printed in Visual studio Code Terminal?
[英]How can I get rid of the ], [ and ' signs in a printed table in ttk
这个问题与: 如何使用Tkinter模仿这个表? .
我已经尝试了第一个例子,但我在打印的表格中得到了数组的边框[
, ]
和字符串的'
符号。 我怎样才能摆脱它们?
下面是源代码,基于前面的例子:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 10 14:26:37 2016
@author: peterk
"""
from tkinter import *
from tkinter.ttk import *
import numpy as np
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.CreateUI()
self.LoadTable()
self.grid(sticky = (N,S,W,E))
parent.grid_rowconfigure(0, weight = 1)
parent.grid_columnconfigure(0, weight = 1)
def CreateUI(self):
tv = Treeview(self)
tv['columns'] = ('Parameter A', 'Parameter m', 'Parameter n')
tv.heading("#0", text='Based on fit', anchor='w')
tv.column("#0", anchor="w")
tv.heading('Parameter A', text='Parameter A')
tv.column('Parameter A', anchor='center', width=100)
tv.heading('Parameter m', text='Parameter m')
tv.column('Parameter m', anchor='center', width=100)
tv.heading('Parameter n', text='Parameter n')
tv.column('Parameter n', anchor='center', width=100)
tv.grid(sticky = (N,S,W,E))
self.treeview = tv
self.grid_rowconfigure(0, weight = 1)
self.grid_columnconfigure(0, weight = 1)
def LoadTable(self):
table1=np.reshape(np.array([10.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.]), (6,3))
# self.treeview.insert('', 'end', text="First", values=('10:00',
# '10:10', 'Ok'))
table2 = numpy.array(["%.8e" % w for w in table1.reshape(table1.size)])
table2 = table2.reshape(table1.shape)
print(table2)
for i in range(6):
self.treeview.insert('', 'end', text="based_on_line_"+str(i), values=(table2[i,:]))
def main():
root = Tk()
App(root)
root.mainloop()
if __name__ == '__main__':
main()
你的 numpy 数组table2
是字符串类型:
>>> import numpy as np
>>> table1=np.reshape(np.array([10.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.]), (6,3))
>>> table2 = np.array(["%.8e" % w for w in table1.reshape(table1.size)])
>>> table2.dtype
dtype('S14')
>>>
在您的LoadTable()
方法中,您正在插入字符串:
self.treeview.insert('', 'end', text="based_on_line_"+str(i), values=(table2[i,:]))
所以得到这个结果是正常的,因为 table2 只是一个字符串表:
>>> table2
array(['1.00000000e+01', '2.00000000e+00', '3.00000000e+00',
'4.00000000e+00', '5.00000000e+00', '6.00000000e+00',
'7.00000000e+00', '8.00000000e+00', '9.00000000e+00',
'1.00000000e+01', '1.10000000e+01', '1.20000000e+01',
'1.30000000e+01', '1.40000000e+01', '1.50000000e+01',
'1.60000000e+01', '1.70000000e+01', '1.80000000e+01'],
dtype='|S14')
>>>
因此,解决方案可能包括将字符串 numpy 数组table2
转换为浮点 numpy 数组:
>>> table3 = table2.astype(np.float)
但是,这不是您期望的结果:
>>> table3
array([ 10., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.,
12., 13., 14., 15., 16., 17., 18.])
>>>
因此,您可能唯一剩下的解决方案是使用 Python regex re
模块:
>>> import re
>>> begueradj = "['1.00000000e+01']"
>>> print begueradj
['1.00000000e+01']
>>> begueradj = re.sub("[\['\]]","",begueradj)
>>> print begueradj
1.00000000e+01
>>>
因此,您可以table2[i,:]
一个对table2[i,:]
每个值进行循环的方法,以删除那些不需要的字符,如上例所示。
但是,为什么要使用正则表达式方法添加更多代码,而您可以通过对LoadTable()
方法进行小幅修改以不太复杂的方式解决您的问题?
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 16 13:07:36 2016
@author: Bill BEGUERADJ
"""
from Tkinter import *
from ttk import *
import numpy as np
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.CreateUI()
self.LoadTable()
self.grid(sticky = (N,S,W,E))
parent.title("Bill Begueradj Python ttk.Treeview Demo Solution")
parent.grid_rowconfigure(0, weight = 1)
parent.grid_columnconfigure(0, weight = 1)
def CreateUI(self):
tv = Treeview(self)
tv['columns'] = ('Parameter A', 'Parameter m', 'Parameter n')
tv.heading("#0", text='Based on fit', anchor='c')
tv.column("#0", anchor="c")
tv.heading('Parameter A', text='Parameter A')
tv.column('Parameter A', anchor='center', width=100)
tv.heading('Parameter m', text='Parameter m')
tv.column('Parameter m', anchor='center', width=100)
tv.heading('Parameter n', text='Parameter n')
tv.column('Parameter n', anchor='center', width=100)
tv.grid(sticky = (N,S,W,E))
self.treeview = tv
self.grid_rowconfigure(0, weight = 1)
self.grid_columnconfigure(0, weight = 1)
def LoadTable(self):
table1=np.reshape(np.array([10.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.]), (6,3))
table2 = np.array(["%.8e" % w for w in table1.reshape(table1.size)])
table2 = table2.reshape(table1.shape)
for i in range(6):
self.treeview.insert('', 'end', text="based_on_line_"+str(i), values=(table2[i,0], table2[i,1],table2[i,2]))
# print table2[i,:]
def main():
root = Tk()
App(root)
root.mainloop()
if __name__ == '__main__':
main()
上面的程序输出了你正在寻找的这个演示:
笔记:
我使用 Python 2.7 对此进行了编码,因此如果您想改用 Python 3.x,那么您只需调整两个导入:
from tkinter import *
而不是from Tkinter import *
from tkinter.ttk import *
而不是from ttk import *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.