基于OOP的wxPython图形用户界面

基于OOP的wxPython图形用户界面,python,oop,wxpython,Python,Oop,Wxpython,首先,感谢大家。在过去的几个月里,我提到了在这些板上可以找到的所有帮助和指导,这帮助我更好地“掌握”python 我还在学习,所以。。。请说简单的话 现在,开始讨论这个问题 我想开发一个相当“面向对象”的GUI,即对象将被创建,从类继承的类继承(通过组合而不是多重继承;) 我现在遇到了一个障碍——如果我概述一下我的步骤,可能会更清楚: 创建“主框架” 在此框架中添加拆分器窗口 在拆分器的左侧添加一个treectrl 现在,问题就从这里开始 我想创建一个对象(具有自己的面板,其中包含一个笔记本,其

首先,感谢大家。在过去的几个月里,我提到了在这些板上可以找到的所有帮助和指导,这帮助我更好地“掌握”python

我还在学习,所以。。。请说简单的话

现在,开始讨论这个问题

我想开发一个相当“面向对象”的GUI,即对象将被创建,从类继承的类继承(通过组合而不是多重继承;)

我现在遇到了一个障碍——如果我概述一下我的步骤,可能会更清楚:

  • 创建“主框架”
  • 在此框架中添加拆分器窗口
  • 在拆分器的左侧添加一个treectrl
  • 现在,问题就从这里开始

    我想创建一个对象(具有自己的面板,其中包含一个笔记本,其中包含与该对象实例相关的各种信息)

    当从treectrl中相应的树项目中选择此对象的每个实例时,应该在拆分器的右侧填充一个不同的实例笔记本

    这就是问题所在

    我已尝试显示/隐藏object.panel引用,并尝试使用splitterwindow替换窗口功能,但均无效

    我试过的一些东西确实替换了右边的面板,但也显示了原来的面板小部件

    如果有人能帮忙,我们将不胜感激


    非常感谢。

    这是使用树控件的选择事件来完成的。我会绑定这些事件,当它们被触发时,你会更新显示器的右侧。你通常可以通过使用新数据重置右侧的小部件,或者隐藏/销毁这些小部件并将新的小部件放置到位来完成

    我有一个XML编辑器,您可以查看它,它可以帮助您了解如何完成这类工作:


    不幸的是,需要大量代码来充分演示您所指的概念。

    谢谢您的建议

    当我阅读您关于treectrl事件的回复时,我想我会很快尝试替换窗口(oldpanel,newpanel),然后隐藏旧的,然后显示新的

    这就完成了!wxPython文档没有说明的是,在调用replacewindow方法后隐藏并显示相应的旧面板和新面板对于正确执行更改是必要的。这可能是因为旧面板和新面板的父级都是splitterwindow

    无论如何,下面的代码可能会帮助其他可能偶然发现此问题/帖子的人,并展示我试图实现的概念

    谢谢你的帮助

    亚历克斯


    欢迎使用Stack Overflow!请阅读并通读,尤其是如何提问。您在这里的最佳选择是进行研究,搜索与此相关的主题,并尝试一下。在进行更多的研究和搜索后,发布您的尝试,并明确指出您遇到的问题,这可以帮助您获得更好的答案。在i请说明你的意图。
    import wx
    
    class MyApp(wx.App):
    
    def __init__(self):
    
    
    
        wx.App.__init__(self, redirect=False, filename='test')
    
        self.f1 = wx.Frame(parent=None, id=-1, title='APP', pos = (100, 100), size=(1000, 700))
        self.split = wx.SplitterWindow(self.f1)     
    
        self.leftPanel = wx.Panel(parent=self.split)
        self.oldPanel = wx.Panel(parent=self.split)
        self.newPanel = wx.Panel(parent=self.split)     
    
        self.oldLabel = wx.StaticText(parent=self.oldPanel, label='This is the old panel...', pos=(50, 50))
        self.newLabel = wx.StaticText(parent=self.newPanel, label='This is now the new panel!', pos=(50, 50))
    
    
    
    
        self.oldBut = wx.Button(parent = self.leftPanel,label='Show Old Panel', pos=(50, 50))
        self.newBut = wx.Button(parent = self.leftPanel, label='Show New Panel', pos=(50, 75))
    
    
        self.leftPanel.Bind(wx.EVT_BUTTON, self.showOld, self.oldBut)               
        self.leftPanel.Bind(wx.EVT_BUTTON, self.showNew, self.newBut)
    
    
        self.split.SplitVertically(self.leftPanel, self.oldPanel)
        self.split.SetMinimumPaneSize(100)
        self.split.SetSashPosition(300)
    
        self.f1.Show()
        self.SetTopWindow(self.f1)
    
    
    def showOld(self, event):
        self.split.ReplaceWindow(self.split.GetWindow2(), self.oldPanel)
        self.newPanel.Hide()
        self.oldPanel.Show()
    
    
    def showNew(self, event):
        self.split.ReplaceWindow(self.split.GetWindow2(), self.newPanel)    
        self.oldPanel.Hide()
        self.newPanel.Show()
    
    
    if __name__ == '__main__':  
        app = MyApp()
        app.MainLoop()