グラフィカル・ユーザー・インターフェースのPythonのレイアウト入門。

4つの主要なwxPythonのレイアウトのレイアウトがあります。

  • ボックスレイアウト
  • StaticBoxレイアウト
  • グリッドレイアウト 
  • フレキシブルグリッドレイアウト

ボックスには、主な方法のレイアウト:

wx.BoxSizer - レイアウトクラス。

wx.BoxSizer() - オブジェクトを作成するには、デフォルトレベルで、レイアウトの方向を指定することができます。

  • wx.HORIZONTAL - 水平方向のレイアウト。
  • wx.VERTICAL - 垂直方向のレイアウト。

追加() - 親ウィンドウに子ウィンドウ(またはコントロール)を追加します。

AddMany() - リストは、複数の子ウィンドウ(またはコントロール)を追加します。

例えば:

#垂直レイアウトマネージャのボックスに、静的なテキストを追加します。

vBox.Add(self.staticText、割合= 5、フラグ= wx.ALIGN_CENTER_VERTICAL | wx.Top | wx.CENTER、ボーダー= 10)

  • 比例 - 現在の子ウィンドウ(またはコントロール)を設定した空間の割合は、親ウィンドウに占めます。
  • フラグ - フラグパラメータ、配向制御、およびフレームサイズ変更。
  • ボーダー - ボーダーの幅を設定します。
  • userData - 追加のデータを送信するために使用することができます。
# Box布局管理器
import wx


class myFrame(wx.Frame):
'自定义窗口类'

def __init__(self):
super().__init__(parent=None, title='Box布局管理器', size=(300, 120))
self.Center()

# 画板
panel = wx.Panel(parent=self)

# 创建垂直方向的Box布局管理器对象
vBox = wx.BoxSizer(wx.VERTICAL)

# 文本
self.staticText = wx.StaticText(parent=panel, label='Click the button to display the text.')
# 将静态文本添加到垂直Box布局管理器
vBox.Add(self.staticText, proportion=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.Top | wx.CENTER, border=10)

# 按钮
b1 = wx.Button(parent=panel, id=10, label='button-1')
b2 = wx.Button(parent=panel, id=11, label='button-2')

# 绑定
self.Bind(wx.EVT_BUTTON, self.on_click, id=10, id2=11)

# 创建水平方向的Box布局管理器对象
hBox = wx.BoxSizer(wx.HORIZONTAL)
# 将按钮添加到水平Box布局管理器
hBox.Add(b1, 0, wx.EXPAND | wx.Bottom, 5)
hBox.Add(b2, 0, wx.EXPAND | wx.Bottom, 5)

# 将水平布局管理器添加到垂直布局管理器

vBox.Add(hBox, proportion=1, flag=wx.CENTER)

panel.SetSizer(vBox)

def on_click(self, evt):
'按钮点击方法'
evtId = evt.GetId()
if evtId == 10:
self.staticText.SetLabelText('Button-1 Click Me.')
elif evtId == 11:
self.staticText.SetLabelText('Button-2 Click Me.')
else:
print('Button Id Error.')


class myApp(wx.App):
'自定义应用程序'

def OnInit(self):
frame = myFrame()

frame.Show()
return True

def OnExit(self):
print('Program Exits.')
return 0


if __name__ == '__main__':
app = myApp()
app.MainLoop()

結果:

    

StaticBox(ただし、静的なテキストの追加フレームと、継承およびwx.BoxSizer)主な方法のレイアウト。

wx.StaticBoxSizer(ボックス、オリエント= HORIZONTAL)

  • ボックス--wx.StaticBox(静的ボックス)オブジェクト。
  • オリエント - レイアウト方向。
# StaticBox-Horizontal
import wx


class myFrame(wx.Frame):
'自定义窗口类'

def __init__(self):
super().__init__(parent=None, title='StaticBox-Horizontal', size=(300, 120))
self.Center()

# 画板
panel = wx.Panel(parent=self)

# 创建垂直Box布局管理器对象
vBox = wx.BoxSizer(wx.VERTICAL)

# 文本
self.staticText = wx.StaticText(parent=panel, label='Click the button to display the text')
vBox.Add(self.staticText, proportion=2, flag=wx.ALIGN_CENTER_VERTICAL | wx.Top | wx.CENTER, border=10)

# 按钮
b1 = wx.Button(parent=panel, label='Button-1', id=10)
b2 = wx.Button(parent=panel, label='Button-2', id=11)

self.Bind(wx.EVT_BUTTON, self.onClick, id=10, id2=11)

# 创建StaticBox-horizontal布局管理器对象
sb = wx.StaticBox(panel, label='Button Box')
hBox = wx.StaticBoxSizer(sb, orient=wx.HORIZONTAL)

# 将按钮添加到StaticBox-horizontal布局管理器
hBox.Add(b1, proportion=0, flag=wx.EXPAND | wx.BOTTOM, border=5)
hBox.Add(b2, proportion=0, flag=wx.EXPAND | wx.BOTTOM, border=5)

# 将StaticBox-horizontal添加到vBox布局管理器
vBox.Add(hBox, proportion=1, flag=wx.CENTER)

panel.SetSizer(vBox)

def onClick(self, evt):
'按钮点击方法'
evtID = evt.GetId()
if evtID == 10:
self.staticText.SetLabelText('Button-1 Click Me.')
elif evtID == 11:
self.staticText.SetLabelText('Button-2 Click Me.')
else:
print('Button ID Error.')


class myApp(wx.App):
'自定义应用程序类'

def OnInit(self):
frame = myFrame()
frame.Show()
return True

def OnExit(self):
print('Program Exits.')
return 0


if __name__ == '__main__':
app = myApp()
app.MainLoop()

結果:

    

グリッドレイアウト:グリッドのサイズは固定されています。主な方法:

(行、COLS、VGAP、hgap)wx.GridSizer - 指定行と列の数。

wx.GridSizer(行、CLOS、hgap)

wx.GridSizer(CLOS、VGAP、hgap)

wx.GridSizer(COLS、ギャップ= wx.Size(0,0))

  • hgap - 水平方向のギャップ。
  • VGAP - 垂直方向の間隔。
  • ギャップ - 垂直ギャップおよび水平方向の間隔。
# Grid布局
import wx


class myFrame(wx.Frame):
'自定义窗口类'

def __init__(self):
super().__init__(parent=None, title='Grid布局',size=(300,300))
self.Center()

panel = wx.Panel(parent=self)

# 按钮
b1 = wx.Button(parent=panel, id=1, label='1')
b2 = wx.Button(parent=panel, id=2, label='2')
b3 = wx.Button(parent=panel, id=3, label='3')
b4 = wx.Button(parent=panel, id=4, label='4')
b5 = wx.Button(parent=panel, id=5, label='5')
b6 = wx.Button(parent=panel, id=6, label='6')
b7 = wx.Button(parent=panel, id=7, label='7')
b8 = wx.Button(parent=panel, id=8, label='8')
b9 = wx.Button(parent=panel, id=9, label='9')

# 创建Grid布局管理器对象
gridB = wx.GridSizer(rows=3, cols=3, vgap=0, hgap=0)

# 将按钮添加到Grid布局管理器
gridB.AddMany(
[(b1, 0, wx.EXPAND), (b2, 0, wx.EXPAND), (b3, 0, wx.EXPAND), (b4, 0, wx.EXPAND), (b5, 0, wx.EXPAND),
(b6, 0, wx.EXPAND), (b7, 0, wx.EXPAND), (b8, 0, wx.EXPAND), (b9, 0, wx.EXPAND)])

panel.SetSizer(gridB)


class myApp(wx.App):
'自定义应用程序类'

def OnInit(self):
frame = myFrame()
frame.Show()
return True

def OnExit(self):
print('Program Exits.')
return 0


if __name__ == '__main__':
app = myApp()
app.MainLoop()

結果:

フレキシブルグリッドレイアウト:異なるメッシュサイズを。主な方法:

wx.FlexGridSizer()--FlexGridレイアウトマネージャオブジェクト。

AddGrowableRow() - 指定された行は、スケーラブルです。

AddGrowableCol() - 指定する列は、拡張可能です。

  • IDX - 行/列インデックスを、0から始まります。

# FlexGrid布局
import wx


class myFrame(wx.Frame):
'自定义窗口类'

def __init__(self):
super().__init__(parent=None, title='FlexGrid布局')
self.Center()
panel = wx.Panel(parent=self)

# 创建FlexGrid布局管理器对象
flexB = wx.FlexGridSizer(3, 2, 10, 10)

# 文本
title = wx.StaticText(panel, label='标题')
anthor = wx.StaticText(panel, label='作者')
review = wx.StaticText(panel, label='内容')

# 输入框
title_tc = wx.TextCtrl(panel)
anthor_tc = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
review_tc = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

# 将文本和输入框添加到FlexGrid布局管理器
flexB.AddMany(
[title, (title_tc, 1, wx.EXPAND), anthor, (anthor_tc, 1, wx.EXPAND), review, (review_tc, 1, wx.EXPAND)])

# 设置比例大小
flexB.AddGrowableRow(0, 1)
flexB.AddGrowableRow(1, 1)
flexB.AddGrowableRow(2, 3)
flexB.AddGrowableCol(0, 1)
flexB.AddGrowableCol(1, 2)

hBox = wx.BoxSizer(wx.HORIZONTAL)
hBox.Add(flexB, proportion=1, flag=wx.ALL | wx.EXPAND, border=10)

panel.SetSizer(hBox) # panel.SetSizer(flexB)


class myApp(wx.App):
'自定义应用程序对象'

def OnInit(self):
frame = myFrame()
frame.Show()
return True

def OnExit(self):
print('Program Exits.')
return 0


if __name__ == '__main__':
app = myApp()
app.MainLoop()

公開された19元の記事 ウォン称賛19 ビュー2141

おすすめ

転載: blog.csdn.net/qq_39979646/article/details/104071870