1

こんにちは、Tktable とオンラインで見つけたラッパーを使用してテーブルを作成しようとしています: http://tkinter.unpythonic.net/wiki/TkTableWrapper

行を追加する方法がわかりません。ファイルに含まれている sample_test メソッドを変更しましたが、成功しませんでした。

私の最終的な目標は、GUI にテーブルを作成し、シリアル接続からデータを読み込むたびに行を書き込むことです。したがって、必要な行数がわかりません。非常に大きなテーブルを事前に割り当てることができましたが、これは遅いようです。非常に多くのデータ パケット (潜在的に数万) を読み取ることを期待しています。

insert_rows メソッドを試してみましたが、それがどのように機能するかを完全には理解していないと思います。ドキュメントは少しまばらです。

また、スクロールバーが機能しませんでした。test.pack メソッド呼び出しの前に以下の行を追加することで簡単に追加できましたが、マウスでスクロールしませんでした。バインディングがオフになっていると思います:

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

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

現状では、sample_test は構成オプション state='disabled' を使用してテーブルを作成します (これが行を追加できない理由です)。作成時、または変更が必要なときはいつでも、最適な方で state='normal' に設定してみてください。

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()
于 2013-02-18T00:46:38.707 に答える