首先,感谢所有人。在过去的几个月中,我已经参考了这些板上提供的所有帮助和指导,这有助于我更好地“掌握” python!
我还在学习,所以...请简单说吧!
现在,解决问题!
在要创建对象的意义上,我想开发一个相当“ OOP繁重”的GUI,该对象将从继承自类的类继承(通过组合而不是多重继承;))
我现在遇到了障碍-如果我概述自己的步骤,可能会更清楚:
现在,问题就从这里开始...
我想创建一个对象(具有自己的面板,其中包含一个笔记本,其中包含有关该对象实例的各种信息。
从该对象的相应树项(从treectrl)中选择该对象的每个实例后,都应使用每个不同的实例笔记本填充拆分器的右侧。
这是问题!
我尝试显示/隐藏object.panel参考,还尝试使用splitterwindow替换窗口功能-无济于事。
我尝试过的某些方法确实替换了右侧面板,但还显示了原始面板小部件...?
如果有人可以提供帮助,将不胜感激。
非常感谢。
答案 0 :(得分:0)
这是使用树控件的选择事件完成的。我将绑定到这些对象,当它们被解雇时,您将更新显示的右侧。通常,您可以通过使用新数据重置右侧的小部件,或隐藏/销毁这些小部件并将新的小部件放置在其位置来实现此目的。
我有一个XML编辑器,您可以查看它,它可能会帮助您了解如何完成此类事情:
不幸的是,要完全证明您所指的概念,需要很多代码。
答案 1 :(得分:0)
感谢您的建议。
当我阅读有关treectrl事件的答复时-我想我会尽快尝试ReplaceWindow(oldpanel,newpanel),然后隐藏旧的,然后显示新的。
这成功了! wxPython文档未能说明的是,正确调用更改后,必须隐藏并在显示replacewindow方法后显示相应的旧面板和新面板。这可能是因为旧面板和新面板的父母都是splitterwindow?
无论如何,以下代码可能会帮助其他人,他们可能会偶然发现此问题/帖子,并展示我正在尝试实现的目标的概念。
感谢您的帮助!
亚历克斯
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()