python - 带有 wxPython 的基于 OOP 的 GUI
问题描述
首先,感谢大家。在过去的几个月里,我参考了可以在这些板上找到的所有帮助和指导,这有助于我更好地“掌握”python!
我还在学习……请简单的单词!
现在,回到问题所在!
我想开发一个相当“OOP 繁重”的 GUI,从某种意义上说,对象将被创建,继承自类继承的类(通过组合而不是多重继承;))
我现在遇到了一个障碍 - 如果我概述我的步骤可能会更清楚:
- 创建一个“主框架”</li>
- 向此框架添加拆分器窗口
- 在拆分器的左侧添加一个 treectrl
现在,这就是问题开始的地方......
我想创建一个对象(带有自己的面板,其中包含一个笔记本,其中包含与对象实例有关的各种信息。
这个对象的每个实例,当从 treectrl 的相应树项中选择时,应该填充拆分器的右侧,每次都有不同的实例笔记本。
这就是问题!
我已经尝试显示/隐藏 object.panel 引用,还尝试使用 splitterwindow 替换窗口功能 - 无济于事。
我尝试过的一些东西确实取代了右侧面板,但也显示了原始面板小部件......?
如果有人可以提供帮助,将不胜感激。
非常感谢。
解决方案
谢谢你的建议。
当我阅读您关于 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()
推荐阅读
- jquery - jQuery:求和多个选择值
- angular - 以编程方式获取@ngrx/store-devtools 的状态
- node.js - 无法理解 Node Express 的各种 API
- node.js - 如何通过 pg-promise 使用 JSONB 操作
- python - 错误:unindent 不匹配任何外部缩进级别(制作 reddit 机器人)
- linux - RAM中的页表在哪里?
- c# - ASP.NET MVC 5 POST 复选框,用于使用 Ajax 的 onclick 控制器
- javascript - 如何在不同设备上连续显示固定数量的图像
- sql - 第一次简单的Oracle查询速度极慢,无法控制数据库?
- java - 如何从一个活动传递数据,然后在另一个活动的 recyclerview 中检索?