我刚开始使用 wxPython,这就是我想做的:
a) 显示一个框架(其中有面板)和该面板上的一个按钮。b)当我按下按钮时,会弹出一个对话框(我可以从中选择)。c) 当我在对话框上按 ok 时,对话框应该消失(销毁),但原来的 Frame+Panel+button 仍然存在。d) 如果我再次按下该按钮,对话框将重新出现。
我的代码如下。不幸的是,我得到了相反的效果。那是,
a) 选择对话框首先出现(即,没有点击任何按钮,因为 TopLevelframe+按钮从未显示)。
b)当我在对话框上单击确定时,会出现带有按钮的框架。
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()