TraitsUI を使用してアプリケーションに取り組んでいます。
いくつかの値を要求するウィンドウをポップアップする必要があります。
ProcessValues ボタンと SaveValues ボタンのようなものがあります。
- ProcessValues がクリックされた場合は、何かを実行してから、ウィンドウを閉じる必要があります
- SaveValues がクリックされた場合は、別の処理を行う必要があり、ウィンドウも閉じる必要があります。
OKボタンはないはず
以下のコード例では、ボタンをクリックするとハンドラー内のメッセージが出力されますが、フレーム内の [x] をクリックする以外にウィンドウを閉じる方法がわかりません。
close() のオーバーロードは、[OK] をクリックした後に呼び出されるため、うまくいかないようです。おそらく、close_window イベントを生成する方法があるか、または別の方法である可能性があります。
誰でも助けることができますか?
from enthought.traits.api import HasTraits, Instance, Str, Int, List, Any, DelegatesTo
from enthought.traits.ui.api import Handler, View, Item, Action
class MyPanelHandler(Handler):
def _process_values(self, info):
#>>>reach process_values() through info and call
print 'values processed OK'
#>>> what goes here so that the window is closed?
def _save_values(self, info):
#>>>reach save_values() through info and call
print 'values saved OK'
#>>> what goes here so that the window is closed?
class MyPanel(HasTraits):
model = Any
name = Str
age = Int
process_values_button = Action(name = 'Process Values', action = '_process_values')
save_values_button = Action(name = 'Save Params', action = '_save_values')
view = View( 'name', 'age', handler = MyPanelHandler(),
buttons = [process_values_button, save_values_button],)
class MyApp(HasTraits):
panel = Instance(MyPanel)
def __init__(self):
self.panel = MyPanel(model = self)
def get_values(self):
self.panel.configure_traits()
def save_values(self, name, age):
print '... doing whatever to save values'
def process_values(self):
print '... doing whatever to process values'
if __name__ == '__main__':
a = MyApp()
a.get_values()