2013-02-06 77 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()