0

私は、Pythonスクリプトの単純なUIを構築するためにTraitsを使用する方法を学ぼうとしています。ユーザーが1つのボタンで単語を追加できるリストを使用してプログラムを作成したり、別のボタンでリストを完全にクリアしたりしたいと思います。

これまで、私は特性を使用しました:

myList = List(Str)

myList = ['Item1','Item2'] #Initial items in list

このリストを特性UIに表示するために、特性UIパッケージのListStrEditorを使用しました。

Item('myList', show_label = False, label = 'Data Files', editor = ListStrEditor(auto_add = False)

2つのボタンをコーディングしました:1)リストにアイテムを追加するための1つ(myList.append('item3'))2)リストを空にするためのCLEARボタン(myList = [])。基本的なUIは良好で、ボタンは機能し、リスト変数は期待どおりに変更されます。

ただし、問題は、GUIのリストが更新されないことです。ただし、それをクリックすると、新しい値が表示されます。また、潜在的に多くのアイテムを追加したいのですが、横にスクロールバーを追加する方法があるのでしょうか?

ListStrEditorのマニュアルと使用法を調べましたが、用語に少し戸惑っています。どうやらrefresh()関数は存在するようですが、ListStrEditorに適用する方法がわかりません。また、「アダプター」と「ハンドラー」のどちらを使用する必要があるのか​​わかりません。

正しい方向へのヒントやポインタをいただければ幸いです。

4

1 に答える 1

4

より完全なコードを見なければ、コードが機能しない理由を知ることは困難です。おそらくあなたは?の使用を逃していますselfか?たとえばself.myList.append('Item3')、ただの代わりにmyList.append('Item3')

以下は私のために働きます。ボタンを押すとすぐにリストの表示が更新されます。

import random

from traits.api import HasTraits, List, Str, Button
from traitsui.api import ListStrEditor, View, UItem


class Demo(HasTraits):

    my_list = List(Str)

    add = Button("ADD")
    clear = Button("CLEAR")

    traits_view = \
        View(
            UItem('my_list', editor=ListStrEditor(auto_add=False)),
            UItem('add'),
            UItem('clear'),
        )

    def _my_list_default(self):
        return ['Item1', 'Item2']

    def _add_fired(self):
        new_item = "Item%d" % random.randint(3, 999)
        self.my_list.append(new_item)

    def _clear_fired(self):
        self.my_list = []


if __name__ == "__main__":
    demo = Demo()
    demo.configure_traits()

wxバックエンドとqt4+pysideバックエンドの両方で動作します。私は、TraitsとTraitsUIのバージョン4.2.0を備えたEnthoughtpythonディストリビューションEPD7.3を使用しています。

コードが大幅に異なる場合は、質問に追加できますか?

于 2013-02-09T15:27:18.143 に答える