【发布时间】:2019-04-04 23:52:14
【问题描述】:
我知道当 ShowModal() 时对话框的父级应该是不可访问的。但是,我的程序需要提供对单独窗口的访问权限,以便用户可以查看该窗口上的信息来决定在对话框上单击哪个按钮。就像在下面的程序中一样,当“对话框”打开时,我希望能够访问“不同的框架”。我怎样才能做到这一点?
import wx
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "Different Frame", size=(300, 300))
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
btn = wx.Button(panel, -1, "open frame")
self.Bind(wx.EVT_BUTTON, self.OnOpenFrame, id=btn.GetId())
sizer.Add(btn)
text = "This is a line.\n" * 100
txtCtrl = wx.TextCtrl(panel, -1, text, style=wx.TE_MULTILINE,
size=(200,200))
sizer.Add(txtCtrl)
panel.SetSizer(sizer)
self.Centre()
self.Show()
def OnOpenFrame(self, evt):
ParentFrame()
class ParentFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, title="Parent Frame",size=(500, 500))
panel = wx.Panel(self)
btn = wx.Button(panel, -1, "open dialog")
self.Bind(wx.EVT_BUTTON, self.OnOpenDialog, id=btn.GetId())
self.Centre()
self.Show()
def OnOpenDialog(self, event):
dlg1 = MyDialog(self)
val = dlg1.ShowModal()
dlg2 = MyDialog(self, val)
dlg2.ShowModal()
class MyDialog(wx.Dialog):
def __init__(self, parent, prevAnsw=None):
wx.Dialog.__init__(self, parent, -1, title = "Dialog")
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
if prevAnsw is not None:
sizer.Add(wx.StaticText(
panel, -1, "Answer from previous Dialog: %s" % prevAnsw))
sizer.Add(wx.StaticText(panel, -1, "Try to scroll in Different Frame to "
"see if it is blocked"))
btn1 = wx.Button(panel, -1, "Pass 1")
self.Bind(wx.EVT_BUTTON, self.OnPass1, id=btn1.GetId())
sizer.Add(btn1)
btn2 = wx.Button(panel, -1, "Pass 2")
self.Bind(wx.EVT_BUTTON, self.OnPass2, id=btn2.GetId())
sizer.Add(btn2)
panel.SetSizer(sizer)
def OnPass1(self, evt):
self.EndModal(1)
def OnPass2(self, evt):
self.EndModal(2)
app = wx.App(0)
frame = MyFrame(None)
frame.Show()
app.MainLoop()
【问题讨论】:
-
您不必以模态方式显示对话框。你可以给他们看……
-
@MikeDriscoll:我知道我可以 Show() 他们。但是我需要很多对话框来逐步显示,其中每一步都是由上一步的结果决定的。只是 Show() 对话框,它与框架没有什么不同。
-
对我来说这听起来像是一个巫师。 wxPython 有一个向导小部件 - wxpython.org/Phoenix/docs/html/wx.adv.Wizard.html
-
@MikeDriscoll 我的直觉是巫师天生就是模态的。
-
它们是
wx.Dialog的子类,但我很确定如果你愿意,你可以以非模态方式使用Show
标签: dialog wxpython accessibility