[英]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.