我相信这对你们来说很容易,但我很难找到解决方案......
我有一个由一堆导入文件构成的Frame来构建一个笔记本......类似于:
class myFrame(wx.Frame):
"""
Frame that holds all other widgets
"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, wx.ID_ANY, "My Frame", size=(520,635))
panel = wx.Panel(self)
notebook = myFrameNotebook(panel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
panel.SetSizer(sizer)
self.CreateStatusBar(style=0)
self.SetStatusText("Welcome to My Frame...")
self.Layout()
self.Show()
self.Centre()
我想,从笔记本的各个页面中更改整个框架的状态文本...如果以上称为myFile,是否有办法从单独的笔记本页面中SetStatusText
(它存储在一个单独的文件中?)
我想做的是,例如,当您从笔记本页面移动到笔记本页面时,状态栏会反映您当前在应用程序中的位置...?
非常感谢,
Chow(仍然是wxPython的新手)
答案 0 :(得分:5)
最好使用PubSub,将你的类依赖于另一个(并减少那个GetParent()。GetParent()噪音:))
import random, string
import wx
from wx.lib.pubsub import Publisher
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(300, 300))
self.CreateStatusBar(style=0)
self.notebook = wx.Notebook(self)
btn = wx.Button(self, label="add page")
btn.Bind(wx.EVT_BUTTON, lambda evt: self.create_page(random.choice(string.letters)))
box = wx.BoxSizer(wx.VERTICAL)
box.Add(btn, 0)
box.Add(self.notebook, 1, wx.EXPAND)
self.SetSizer(box)
Publisher().subscribe(self.change_statusbar, 'change_statusbar')
self.create_page("1")
self.create_page("2")
self.Layout()
def create_page(self, text):
self.notebook.AddPage(Page(self.notebook, text), text)
def change_statusbar(self, msg):
self.SetStatusText(msg.data)
class Page(wx.Panel):
def __init__(self, parent, text):
wx.Panel.__init__(self, parent)
Publisher().sendMessage(('change_statusbar'), text)
app = wx.App(redirect=False)
top = Frame()
top.Show()
app.MainLoop()
答案 1 :(得分:0)
尝试这样的事情(不熟悉Python,但这就是我在C ++中所做的)。在你的构造函数中:
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
在Frame类中编写一个新方法:
def OnPageChanged(self, event):
selected_page = event.GetSelection()
if selected_page == wx.NOT_FOUND:
self.SetStatusText("No page selected!")
else:
self.SetStatusText("Welcome to notebook page: " + event.GetEventObject().GetPageText(selected_page)
我没有安装wxPython,所以这是未经测试的,但这是一般的想法。这将设置状态栏以反映所选页面的标题。如果你需要它来显示存储在页面中的一些其他数据,你可以利用Python的动态,只需为每个页面添加一个属性:
def OnLoadPages(self):
# Read pages from a file
# Every time you add a page, do this:
page.status_bar_info = whatever_you_want_to_put_here
def OnPageChanged(self, event):
# Basically the same as above
# Instead of calling GetPageText, do this:
self.SetStatusText(event.GetEventObject().GetCurrentPage().status_bar_info)