2013-02-06 83 views
1

您好我想创建使用Tktable和我在网上发现纸上出现表:http://tkinter.unpythonic.net/wiki/TkTableWrapperTkTable插入行蟒蛇

我无法理解如何添加行。我一直在修改文件中包含的sample_test方法,但没有成功。

我的最终目标是在我的GUI中创建一个表格,然后在每次从串行连接读取数据时写入一行。因此我不知道我需要多少行。我可以预先分配一个非常大的表格,但这看起来很慢。我期待读取大量的数据包(可能有数万个)。

我试过了insert_rows方法,但我不认为我完全理解它是如何工作的,而且文档有点稀疏。

此外,我无法让滚动条工作。虽然我可以在test.pack方法调用之前添加以下几行,但它们不会随鼠标一起滚动。我认为绑定关闭:

scroll = Tkinter.Scrollbar(root) 
test.configure(yscrollcommand=scroll.set) 
scroll.pack(side=Tkinter.RIGHT,fill=Tkinter.Y) 

任何帮助,将不胜感激。 谢谢。

回答

0

现在,sample_test使用配置选项 state ='disabled'创建一个表(这就是为什么您不能添加更多行)。 尝试将其设置为状态='正常',无论是在创建时,还是您需要 进行更改(以最合适的为准)。

def sample_test(): 
    from Tkinter import Tk, Scrollbar, Button 

    def test_cmd(event): 
     print 'command' 

    def browsecmd(event): 
     print 'browsecmd' 
     #print event.__dict__ 

    root = Tk() 
    quit = Button(root, text="QUIT", command=root.destroy) 
    quit.pack(side = 'bottom')  

    numrows, numcols = 10, 10 

    var = ArrayVar(root) 
    for y in range(numrows): 
     for x in range(numcols): 
      index = "%i,%i" % (y, x) 
      var[index] = index 

    test = Table(root, 
       rows=numrows+1, 
       cols=numcols+1, 
       state='normal', 
       width=6, 
       height=6, 
       titlerows=1, 
       titlecols=1, 
       roworigin=-1, 
       colorigin=-1, 
       selectmode='extended', 
       selecttype='row', 
       rowstretch='unset', 
       colstretch='last', 
       browsecmd=browsecmd, 
       flashmode='on', 
       variable=var, 
       usecommand=0, 
       command=test_cmd) 

    # http://effbot.org/zone/tkinter-scrollbar-patterns.htm 
    s = Scrollbar(root, orient='vertical', command=test.yview_scroll) 
    test.config(yscrollcommand=s.set) 
    s.pack(side='right', fill='y') 

    test.pack(expand=1, fill='both') 
    test.tag_configure('sel', background = 'yellow') 
    test.tag_configure('active', background = 'blue') 
    test.tag_configure('title', anchor='w', bg='red', relief='sunken') 

    data = ('py','t','h','o','n','','+','','Tk','') 

    def add_new_data(*args): 
     #test.config(state='normal') 
     test.insert_rows('end', 1) 
     r = test.index('end').split(',')[0] #get row number <str> 
     args = (r,) + args 
     idx = r + ',-1' 
     test.set('row', idx, *args) 
     test.see(idx) 
     #test.config(state='disabled') 

    root.after(3000, add_new_data, *data) 
    root.after(4000, add_new_data, *data) 
    root.mainloop()