Pet*_*rne 10 python wxwidgets wxpython
我在各种大小调整器中有几个按钮,它们以我想要的方式扩展.但是,当我将父项添加到用于在框架中的所有元素周围添加边框的新wx.BoxSizer时,已添加的sizer在垂直方向上正确运行,但不能水平运行.
以下代码演示了此问题:
#! /usr/bin/env python
import wx
import webbrowser
class App(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show()
self.SetTopWindow(frame)
return True
class MainFrame(wx.Frame):
title = 'Title'
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
panel = wx.Panel(self)
#icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG)
#self.SetIcon(icon)
sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10)
button1 = wx.Button(panel, -1, 'BUTTON')
sizer.Add(button1, 0, wx.EXPAND)
buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5)
buttonDelete = wx.Button(panel, -1, 'Delete')
buttonSizer.Add(buttonDelete, 0, 0)
buttonEdit = wx.Button(panel, -1, 'Edit')
buttonSizer.Add(buttonEdit, 0, 0)
buttonNew = wx.Button(panel, -1, 'New')
buttonSizer.Add(buttonNew, 0, 0)
buttonSizer.AddGrowableCol(0, 0)
sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL)
sizer.AddGrowableCol(0, 0)
sizer.AddGrowableRow(0, 0)
mainSizer = wx.BoxSizer(wx.EXPAND)
mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10)
#panel.SetSizerAndFit(sizer)
#sizer.SetSizeHints(self)
panel.SetSizerAndFit(mainSizer)
mainSizer.SetSizeHints(self)
if __name__ == '__main__':
app = App(False)
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
评论第57和58行以及取消注释第55和56行将删除额外的BoxSizer,并显示我希望一切都能正常运行(当然没有空格).
我完全陷入了这个问题,仍然不知道如何解决它.
Fog*_*ird 26
首先,你错误地传递了一些旗帜.BoxSizer需要wx.HORIZONTAL或wx.VERTICAL,而不是wx.EXPAND.sizer.Add不带wx.HORIZONTAL.
如果你有一个VERTICAL BoxSizer,wx.EXPAND将使控件水平填充,而1或更多的比例(Add的第二个参数)将使控件垂直填充.这与HORIZONTAL BoxSizers相反.
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(widget1, 0, wx.EXPAND)
sizer.Add(widget2, 1)
Run Code Online (Sandbox Code Playgroud)
widget1将水平扩展.widget2将垂直扩展.
如果你将sizer放在另一个sizer中,你需要确保设置它的比例和EXPAND标志,以便它的内部将增长你想要的.
我会把剩下的留给你.
| 归档时间: |
|
| 查看次数: |
7489 次 |
| 最近记录: |