gpt4 book ai didi

wxPython:如何从各个笔记本面板引用框架的状态栏?

转载 作者:行者123 更新时间:2023-12-02 01:19:24 26 4
gpt4 key购买 nike

我确信这对你们来说很容易,但我很难找到解决方案......

我有一个由一堆导入文件构成的框架来构建笔记本......类似于:

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单独的笔记本页面(存储在单独的文件中?)

例如,我想做的是,当您从笔记本页面移动到笔记本页面时,状态栏会反射(reflect)您当前在应用程序中的位置...?

非常感谢

Chow(对于 wxPython 还是新手)

最佳答案

为此最好使用 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()

关于wxPython:如何从各个笔记本面板引用框架的状态栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com