当我在调用show grid后显示模式对话框时,面板上的用户输入不会被阻止。在调用show grid之前,通过阻止面板上的任何用户输入,模式对话框的行为正确。我做错了会产生这种行为吗?以下是我设置类的方法(Python 2.7,wx 4.0.0a3):
Import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, style=(wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER|wx.CAPTION)) | wx.FRAME_SHAPED | wx.FRAME_FLOAT_ON_PARENT)
self.firstPanel = MyFirstPanel.MyFirstPanel(self)
self.secondPanel = MySecondPanel.MySecondPanel(self)
class MyFirstPanel(wx.Panel):
def __init__(self):
wx.Panel.__init__(self)
self.myTextControl = MyTextCtrl.MyTextCtrl(self, style=wx.WANTS_CHARS|wx.BORDER_NONE)
self.myButton = MyButton.MyButton(self)
self.myButton.Bind(wx.EVT_BUTTON, self.__OnMyButton)
def __OnMyButton(self):
self.myDialog = MyDialog.MyDialog(self, style=(wx.DEFAULT_DIALOG_STYLE & (~wx.CAPTION)) & (~wx.CLOSE_BOX) | wx.STAY_ON_TOP | wx.FRAME_SHAPED)
response = self.myDialog.Query()
self.myDialog.Destroy()
event.Skip()
class MySecondPanel(wx.Panel):
def __init__(self):
wx.Panel.__init__(self)
self.myGrid = MyGrid.MyGrid(self)
class MyGrid(wx.Grid):
def __init__(self):
wx.Grid.__init__(self, style=0)
self.CreateGrid(0, 2)
self.SetWindowstyle(self.GetWindowStyleFlag()&~wx.HSCROLL)
self.Layout()
class MyTextCtrl(wx.Control):
def __init__(self):
wx.Control.__init__(self, style=wx.WANT_CHARS | wx.BORDER_NONE)
class MyDialog(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self):
def Query(self):
response = self.ShowModal()
return response
class MyButton(wx.Control):
def __init__(self):
wx.Control.__init__(self)
在此示例中,如果我显示第一个面板并按下按钮,则模态对话框会阻止所有事件到整个面板,包括文本控件的事件。如果我显示包含网格对象的第二个面板,然后返回到第一个面板并按下按钮,则模态对话框不会阻止事件。显示对话框后,我可以选择文本控件。