我有一个使用PyWizardPage创建的向导。它从一个主页开始,然后用户通过多个页面请求输入信息。在其中一页上,我创建了一个浏览按钮,要求用户选择一个文件。然后,在下一页上,我有一个“验证详细信息”的东西,它显示一个框,其中包含用户通过向导选择的所有输入,并要求他在继续之前确保信息是正确的。如何在wxPython PyWizardPage向导的页面之间传递信息?
我的问题是,我不能得到任何前面的页面上的用户输入传递到我的“验证详细信息”页面。
对于我的设置,我有一个WizardPage类,我打电话在我的向导中创建每个页面。
mywizard.py
import wx
import wx.wizard
class WizardPage(wx.wizard.PyWizardPage):
def __init__(self, parent, title):
wx.wizard.PyWizardPage.__init__(self, parent)
self.next = None
self.prev = None
self.initializeUI(title)
def initializeUI(self, title):
# create grid layout manager
self.sizer = wx.GridBagSizer()
self.SetSizerAndFit(self.sizer)
def addWidget(self, widget, pos, span):
self.sizer.Add(widget, pos, span, wx.EXPAND)
# getters and setters
def SetPrev(self, prev):
self.prev = prev
def SetNext(self, next):
self.next = next
def GetPrev(self):
return self.prev
def GetNext(self):
return self.next
然后,在一个单独的文件,我有一个函数来创建每个页面。第一页的功能调用函数来创建其他页面。我也使用名为“browse1”和“browse2”的帮助函数来打开wx.FileDialog
等等。
pages.py
import wx
from mywizard import *
#### HELPER FUNCTIONS ####
def browse1(event, parent_page):
wildcards = ...
dlg = wx.FileDialog(parent_page, "Blahblah", "", "",
wildcards, wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if dlg.ShowModal() == wx.ID_OK:
global x1
global bro1
x1.SetValue(dlg.GetDirectory() + "\\" + dlg.GetFilename())
bro1 = x1.GetValue()
def browse2(event, parent_page):
wildcards = ...
dlg = wx.FileDialog(parent_page, "Select new certificate", "", "",
wildcards, wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if dlg.ShowModal() == wx.ID_OK:
global x2
global bro2
x2.SetValue(dlg.GetDirectory() + "\\" + dlg.GetFilename())
bro2 = x2.GetValue()
#### END HELPER FUNCTIONS ####
def create_page1(wizard):
page1 = WizardPage(wizard, "Page 1")
d = wx.StaticText(...)
page1.addWidget(d, (2, 1), (1,5))
page2 = create_update_certs_page2(wizard)
page3 = create_update_certs_page3(wizard)
# Set links
page2.SetPrev(page1)
page1.SetNext(page2)
page3.SetPrev(page2)
page2.SetNext(page3)
return page1
def create_page2(wizard):
page2 = WizardPage(wizard, "Page 2")
b1 = wx.Button(page2, -1, "Browse...", wx.DefaultPosition, (85, 23))
b1.Bind(wx.EVT_BUTTON, lambda evt: browse1(evt, page2))
global x1
x1 = wx.TextCtrl(...) # the text area where the Browse path is populated
b2 = wx.Button(page2, -1, "Browse...", wx.DefaultPosition, (85, 23))
b2.Bind(wx.EVT_BUTTON, lambda evt: browse2(evt, page2))
global x2
x2 = wx.TextCtrl(...) # the text area where the Browse path is populated
page2.addWidget(b1, ..., ...)
page2.addWidget(b2, ..., ...)
page2.addWidget(x1, ..., ...)
page2.addWidget(x2, ..., ...)
return page2
def create_page3(wizard):
print "bro1 is" + bro1 # these print empty strings
print "bro2 is" + bro2 # not, the browse path and file that should be populated
基本上,x1
和x2
指的是我做了全球,所以我可以填充它们在browse1
和browse2
功能wx.TextCtrl
部件。现在,我想访问create_page3
函数中的bro1
和bro2
变量中的填充值,但没有显示任何内容。
而且在pages.py的主要代码:
app = wx.App(redirect = False)
wizard = wx.wizard.Wizard(None, -1, "Some Title")
wizard.SetPageSize((500, 350))
mypage1 = create_page1(wizard)
# Let's go!
wizard.RunWizard(mypage1)
任何帮助将不胜感激。
他们为什么要成为全球?如果您需要在其他函数或页面中使用它们的值,请考虑将它们作为参数传递给您的函数或类。 – msvalkon