【问题标题】:wxPython - how to create a single frame with two inset panels?wxPython - 如何用两个嵌入面板创建一个框架?
【发布时间】:2021-12-03 16:55:45
【问题描述】:

我正在编写一个使用 wxPython 作为 GUI 的程序,并且我想做一些类似于(现在看起来已经过时的)传统 Windows 帮助部分的东西,左侧有一个目录树/目录,一个垂直分隔线,以及您在右侧树中选择的任何页面的内容,其中树和信息都嵌入到屏幕上的斜面区域中。在搜索了文档(和 SO)之后,我似乎无法找到如何做到这一点——但我知道这是可能的。我在这样的框架文档中看到了屏幕截图,但没有提供代码(屏幕截图不在与您将如何完成此操作相关的页面上——我想说它在树视图的页面上或东西)。

附件是我的目标截图。它不必像屏幕截图那样复杂,我只想要静态树的一般概念,甚至只是左侧更新右侧内容的链接列表,但两个面板都设置为斜角框架(在这个词的常识中),中间有一个竖线。

有人知道怎么做吗?

EDIT 因为人们似乎误解了这个问题。我不需要任何人编写代码来为我在图像中生成这样的框架。我只想知道 wxPython 中是否有一种方法可以使面板显示为设置在框架中,就像图像中的树和内容部分一样。简单地将两个面板设置到一个框架中是微不足道的,但是没有可见的边框,除非您在设置框架时向sizer.Add() 调用添加border=somevalue 参数,然后“分隔线”只是一个没有吸引力的灰色区域。抱歉,我无法显示代码;如果我知道创建这样一个嵌入面板的代码,我就不会在这里。我可以证明我知道如何将多个面板添加到单个框架并根据另一个面板中的处理程序捕获的事件动态更新一个面板,如果这有帮助的话,但我认为这不是特别相关。

【问题讨论】:

  • 你看过wx.SplitterWindow吗?
  • 这正是我想要的。太感谢了!如果您作为答案发布,我会将其标记为已接受

标签: python-3.x user-interface wxpython


【解决方案1】:

根据我的评论,wx.SplitterWindow 可能最符合您的要求。
我的一个项目中的 SplitterWindow 示例:

它没有接近复制您的示例,但它确实说明了事物的外观和感觉,一个管理两个子窗口的类。

【讨论】:

  • 这肯定够接近了!很好的 EQ ;) 再次感谢!
【解决方案2】:

您没有尝试向我们展示您为完成这项工作所做的工作。您的问题似乎是要求其他人为您完成所有工作。

这是一个简单的程序,它创建了两个面板,左侧是树,右侧是文本控件。剩下的交给你了

import wx


class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(None, *args, **kwargs)
        self.size = (400, 1000)
        self.Title = 'Two panels'

        self.help_panel = HelpPanel(self)
        self.index_panel = IndexPanel(self)
        panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
        panel_sizer.Add(self.help_panel, flag=wx.RIGHT, border=5)
        panel_sizer.Add(self.index_panel)
        main_sizer = wx.BoxSizer(wx.HORIZONTAL)
        main_sizer.Add(panel_sizer, flag=wx.ALL, border=5)
        self.SetSizer(main_sizer)
        self.Center()
        self.Show()


class IndexPanel(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.tree = wx.TreeCtrl(self, size=(200,400),  style=wx.TR_DEFAULT_STYLE)
        sizer.Add(self.tree)
        self.SetSizer(sizer)


class HelpPanel(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.tree = wx.TextCtrl(self, size=(200,400),  style=wx.TE_MULTILINE)
        sizer.Add(self.tree)
        self.SetSizer(sizer)


if __name__ == '__main__':
        wx_app = wx.App()
        MainFrame()
        wx_app.MainLoop()

【讨论】:

  • 我的问题不是要求别人为我做任何工作;我的问题是询问是否存在一个 wxPython 方法来创建类似于图像中的分割框架。我为使其正常工作所做的工作是搜索 API 文档。我知道制作一个带有两个没有任何边框的面板的框架将没有分隔线,而且我知道将 border=somevalue 添加到 sizer.Add() 调用将产生一个不吸引人的灰色区域。如果您在 API 文档中找不到所需的方法,则无需进行编码。不过,感谢您向我展示如何将两个面板放在一个框架中。
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多