wxpython:只要第二帧打开就暂停代码
wxpython: pause code as long as second frame is open
我几乎是一个 Python 初学者,最近才开始使用 wxpython,现在有以下问题:
我正在编写一个应用程序,其中一个 window 打开并通过单击一个按钮,用户打开第二个 window,他们应该在其中输入他们的名字并单击另一个按钮.我的问题是我不知道如何暂停通过单击 Button1 执行的 'event code',直到用户在第二个 window 中完成他们的操作.
有没有办法暂停 OnButton1 中的代码(在行 secondframe.Show()
之后,直到用户在 SecondFrame[ 中输入他们的名字=25=] 并点击 OnButton2?
基本上我的目标是首先打印用户名,然后才打印 完成
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button1 = wx.Button(self.panel, label='Button 1', pos=(20, 10), size=(90, 25))
#Set event handlers
self.Button1.Bind(wx.EVT_BUTTON, self.OnButton1)
def OnButton1(self, e):
secondframe = SecondFrame(None)
secondframe.Show()
print("Done")
class SecondFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button2 = wx.Button(self.panel, label='Button 2', pos=(50, 20), size=(90, 25))
self.NameBox = wx.TextCtrl(self.panel, value="Type Your Name", pos=(50, 60), size=(200, -1))
#Set event handlers
self.Button2.Bind(wx.EVT_BUTTON, self.OnButton2)
def OnButton2(self, e):
Name = self.NameBox.GetValue()
print(Name)
app = wx.App(False)
frame = MainFrame(None)
frame.Show()
app.MainLoop()
我不知道有什么方法可以真正阻止那里的代码。 (另外,一般来说,阻塞从来都不是一个好主意。)
但是你可以获得这样的相同行为:
- 打开第二个 window,在第一个 Window 中调用
self.Disable()
- 当创建第二个 window 时,您还将对第一个 window 的引用传递给它(即
secondframe = SecondFrame(None, self)
),调整构造函数(def __init__(self, parent, main):
)和将它存储在一个变量中 (self.mainFrame = main
)。
- 您向 MainFrame 添加一个方法,例如
reenable(self)
- 你叫
self.Enable()
- 完成第二帧后,您只需调用
self.mainFrame.reenable()
总而言之,这将是这样的:
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button1 = wx.Button(self.panel, label='Button 1', pos=(20, 10), size=(90, 25))
#Set event handlers
self.Button1.Bind(wx.EVT_BUTTON, self.OnButton1)
def OnButton1(self, e):
secondframe = SecondFrame(None, self)
self.Disable()
secondframe.Show()
def reenable(self):
self.Enable()
print("done")
class SecondFrame(wx.Frame):
def __init__(self, parent, main):
wx.Frame.__init__(self, parent)
self.mainFrame = main
self.panel = wx.Panel(self)
self.Button2 = wx.Button(self.panel, label='Button 2', pos=(50, 20), size=(90, 25))
self.NameBox = wx.TextCtrl(self.panel, value="Type Your Name", pos=(50, 60), size=(200, -1))
#Set event handlers
self.Button2.Bind(wx.EVT_BUTTON, self.OnButton2)
def OnButton2(self, e):
Name = self.NameBox.GetValue()
print(Name)
self.mainFrame.reenable()
app = wx.App(False)
frame = MainFrame(None)
frame.Show()
app.MainLoop()
我几乎是一个 Python 初学者,最近才开始使用 wxpython,现在有以下问题:
我正在编写一个应用程序,其中一个 window 打开并通过单击一个按钮,用户打开第二个 window,他们应该在其中输入他们的名字并单击另一个按钮.我的问题是我不知道如何暂停通过单击 Button1 执行的 'event code',直到用户在第二个 window 中完成他们的操作.
有没有办法暂停 OnButton1 中的代码(在行 secondframe.Show()
之后,直到用户在 SecondFrame[ 中输入他们的名字=25=] 并点击 OnButton2?
基本上我的目标是首先打印用户名,然后才打印 完成
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button1 = wx.Button(self.panel, label='Button 1', pos=(20, 10), size=(90, 25))
#Set event handlers
self.Button1.Bind(wx.EVT_BUTTON, self.OnButton1)
def OnButton1(self, e):
secondframe = SecondFrame(None)
secondframe.Show()
print("Done")
class SecondFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button2 = wx.Button(self.panel, label='Button 2', pos=(50, 20), size=(90, 25))
self.NameBox = wx.TextCtrl(self.panel, value="Type Your Name", pos=(50, 60), size=(200, -1))
#Set event handlers
self.Button2.Bind(wx.EVT_BUTTON, self.OnButton2)
def OnButton2(self, e):
Name = self.NameBox.GetValue()
print(Name)
app = wx.App(False)
frame = MainFrame(None)
frame.Show()
app.MainLoop()
我不知道有什么方法可以真正阻止那里的代码。 (另外,一般来说,阻塞从来都不是一个好主意。)
但是你可以获得这样的相同行为:
- 打开第二个 window,在第一个 Window 中调用
self.Disable()
- 当创建第二个 window 时,您还将对第一个 window 的引用传递给它(即
secondframe = SecondFrame(None, self)
),调整构造函数(def __init__(self, parent, main):
)和将它存储在一个变量中 (self.mainFrame = main
)。 - 您向 MainFrame 添加一个方法,例如
reenable(self)
- 你叫
self.Enable()
- 完成第二帧后,您只需调用
self.mainFrame.reenable()
总而言之,这将是这样的:
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self)
self.Button1 = wx.Button(self.panel, label='Button 1', pos=(20, 10), size=(90, 25))
#Set event handlers
self.Button1.Bind(wx.EVT_BUTTON, self.OnButton1)
def OnButton1(self, e):
secondframe = SecondFrame(None, self)
self.Disable()
secondframe.Show()
def reenable(self):
self.Enable()
print("done")
class SecondFrame(wx.Frame):
def __init__(self, parent, main):
wx.Frame.__init__(self, parent)
self.mainFrame = main
self.panel = wx.Panel(self)
self.Button2 = wx.Button(self.panel, label='Button 2', pos=(50, 20), size=(90, 25))
self.NameBox = wx.TextCtrl(self.panel, value="Type Your Name", pos=(50, 60), size=(200, -1))
#Set event handlers
self.Button2.Bind(wx.EVT_BUTTON, self.OnButton2)
def OnButton2(self, e):
Name = self.NameBox.GetValue()
print(Name)
self.mainFrame.reenable()
app = wx.App(False)
frame = MainFrame(None)
frame.Show()
app.MainLoop()