如何使用wxPython布局3窗格窗口?
我试图找到一个简单的方法来布局一个3窗格的窗口使用wxPython 我希望在左窗格中有一个树列表,然后在右窗格中拆分为两个-顶部有一个编辑组件,底部有一个网格组件 大致如下: -------------------------------------- | | | | | Edit | | Tree | Control | | Control | | | |----------------------| | | | | | Grid | | | | -------------------------------------- -------------------------------------- | | | ||编辑| |树控制| |控制|| | |----------------------| | | | ||网格| | | | -------------------------------------- 我希望窗口能够重新调整大小,并允许用户通过拖动边框来更改窗口中每个组件的(相对)大小如何使用wxPython布局3窗格窗口?,python,layout,wxpython,elasticlayout,Python,Layout,Wxpython,Elasticlayout,我试图找到一个简单的方法来布局一个3窗格的窗口使用wxPython 我希望在左窗格中有一个树列表,然后在右窗格中拆分为两个-顶部有一个编辑组件,底部有一个网格组件 大致如下: -------------------------------------- | | | | | Edit | | Tree | Control | | Con
我想我需要一些大小器和/或拆分器窗口组件的组合,但在文档或web上找不到这种窗口的合适示例 例如,您应该使用wxSplitter。另一个。和。首先下载wxPython的gui生成器(或者,我更喜欢wxGlade) 然后你必须决定是使用a还是a,然后你就完成了。下面您可以找到这两个(在树和右侧之间是一个GridSizer->自动调整大小)。在Edit和GridCtrl之间是一个大小调整器(手动调整大小) 问候 一分钟工作,不输入一行代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Sat Feb 07 10:02:31 2009
import wx
import wx.grid
# begin wxGlade: extracode
# end wxGlade
class MyDialog(wx.Dialog):
def __init__(self, *args, **kwds):
# begin wxGlade: MyDialog.__init__
kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME
wx.Dialog.__init__(self, *args, **kwds)
self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER)
self.tree_ctrl_1 = wx.TreeCtrl(self, -1, style=wx.TR_HAS_BUTTONS|wx.TR_LINES_AT_ROOT|wx.TR_DEFAULT_STYLE|wx.SUNKEN_BORDER)
self.text_ctrl_1 = wx.TextCtrl(self.window_1, -1, "This is the Edit", style=wx.TE_MULTILINE)
self.grid_1 = wx.grid.Grid(self.window_1, -1, size=(1, 1))
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyDialog.__set_properties
self.SetTitle("dialog_1")
self.grid_1.CreateGrid(10, 3)
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyDialog.__do_layout
grid_sizer_1 = wx.FlexGridSizer(1, 2, 3, 3)
grid_sizer_1.Add(self.tree_ctrl_1, 1, wx.EXPAND, 0)
self.window_1.SplitHorizontally(self.text_ctrl_1, self.grid_1)
grid_sizer_1.Add(self.window_1, 1, wx.EXPAND, 0)
self.SetSizer(grid_sizer_1)
grid_sizer_1.Fit(self)
grid_sizer_1.AddGrowableRow(0)
grid_sizer_1.AddGrowableCol(0)
grid_sizer_1.AddGrowableCol(1)
self.Layout()
# end wxGlade
# end of class MyDialog
class MyApp(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
mainDlg = MyDialog(None, -1, "")
self.SetTopWindow(mainDlg)
mainDlg.Show()
return 1
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
<>您可以考虑使用高级用户界面模块,因为它允许您非常容易地构建这样的UIS。用户还可以根据自己的喜好最小化、最大化和拖动窗格。它很灵活。事实上,我发现使用aui工具包来设计这种UI比使用网格和拆分器更容易。加上所有别致的按钮,应用程序看起来更酷。:)
官方演示中有一个很好的例子,叫做AUI_DockingWindowMgr。这是一个非常简单的布局,使用wx.AUI和三个面板。我想你可以很容易地调整它以适应你的需要 奥扬普
import wx
import wx.aui
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.mgr = wx.aui.AuiManager(self)
leftpanel = wx.Panel(self, -1, size = (200, 150))
rightpanel = wx.Panel(self, -1, size = (200, 150))
bottompanel = wx.Panel(self, -1, size = (200, 150))
self.mgr.AddPane(leftpanel, wx.aui.AuiPaneInfo().Bottom())
self.mgr.AddPane(rightpanel, wx.aui.AuiPaneInfo().Left().Layer(1))
self.mgr.AddPane(bottompanel, wx.aui.AuiPaneInfo().Center().Layer(2))
self.mgr.Update()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '07_wxaui.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
谢谢,这就是我要找的。恰恰相反,我使用XRCed复制了布局(有些),并在我的应用程序中使用该布局。wxGlade和XRCed都不需要制作可行的解决方案。