私は wxPython を使い始めたばかりで、これが私がやりたいことです:
a) フレーム (その中にパネルがある) とそのパネルのボタンを表示します。b) ボタンを押すと、ダイアログ ボックスが表示されます (選択肢から選択できます)。c) ダイアログ ボックスで [OK] を押すと、ダイアログ ボックスは消える (破棄される) はずですが、元のフレーム + パネル + ボタンはまだそこにあります。d) そのボタンをもう一度押すと、ダイアログ ボックスが再び表示されます。
私のコードを以下に示します。残念ながら逆効果です。あれは、
a) 選択ダイアログ ボックスが最初に表示されます (つまり、TopLevelframe+button が表示されないため、ボタンをクリックせずに)。
b) ダイアログ ボックスで [OK] をクリックすると、ボタン付きのフレームが表示されます。
c) ボタンをもう一度クリックしても効果がありません (つまり、ダイアログ ボックスは再び表示されません)。
私は何を間違っていますか?フレームが初期化されるとすぐに (.Show() が呼び出される前であっても)、ダイアログ ボックスが初期化されて自動的に表示されるようです。
Python 2.6を搭載したWindowsXPでEclipse + Pydevを使用してこれを行っています
============ファイル:MainFile.py===============
import wx
import MyDialog #This is implemented in another file: MyDialog.py
class TopLevelFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"Test",size=(300,200))
panel=wx.Panel(self)
button=wx.Button(panel, label='Show Dialog', pos=(130,20), size=(60,20))
# Bind EVENTS --> HANDLERS.
button.Bind(wx.EVT_BUTTON, MyDialog.start(self))
# Run the main loop to start program.
if __name__=='__main__':
app=wx.PySimpleApp()
TopLevelFrame(parent=None, id=-1).Show()
app.MainLoop()
============ファイル:MyDialog.py===============
import wx
def start(parent):
inputbox = wx.SingleChoiceDialog(None,'Choose Fruit', 'Selection Title',
['apple','banana','orange','papaya'])
if inputbox.ShowModal()==wx.ID_OK:
answer = inputbox.GetStringSelection()
inputbox.Destroy()