【问题标题】:How can I get rid of the ], [ and ' signs in a printed table in ttk如何摆脱 ttk 打印表格中的 ]、[ 和 ' 标志
【发布时间】:2016-03-10 15:04:14
【问题描述】:

此问题与:How to imitate this table using 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()

【问题讨论】:

    标签: python python-3.x tkinter ttk


    【解决方案1】:

    你的 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 正则表达式 re 模块:

    >>> import re
    >>> begueradj = "['1.00000000e+01']"
    >>> print begueradj
    ['1.00000000e+01']
    >>> begueradj = re.sub("[\['\]]","",begueradj)
    >>> print begueradj
    1.00000000e+01
    >>>
    

    因此,您可以编写一个循环 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 *

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2021-12-06
      • 2011-04-17
      • 1970-01-01
      • 2021-04-19
      • 2021-11-07
      相关资源
      最近更新 更多