wxPython Grid干扰模态行为

时间:2017-10-19 18:09:24

标签: python wxpython

当我在调用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)

在此示例中,如果我显示第一个面板并按下按钮,则模态对话框会阻止所有事件到整个面板,包括文本控件的事件。如果我显示包含网格对象的第二个面板,然后返回到第一个面板并按下按钮,则模态对话框不会阻止事件。显示对话框后,我可以选择文本控件。

0 个答案:

没有答案