日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

wxpython制作表格界面_wxpython入门第二步(布局)

發(fā)布時(shí)間:2024/1/23 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wxpython制作表格界面_wxpython入门第二步(布局) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一個(gè)典型的應(yīng)用程序由各種小組件組成。這些組件被放置在容器里面。程序員必須管理應(yīng)用程序的布局。在 wxPython 中,可以使用絕對(duì)定位或使用 sizer 來(lái)布局小組件。

絕對(duì)定位

程序員以像素為單位指定每個(gè)小組件的位置和大小。絕對(duì)定位有幾個(gè)缺點(diǎn)。如果我們調(diào)整窗口的大小,小組件的大小和位置不會(huì)改變。

應(yīng)用程序在不同平臺(tái)上的外觀不同。

改變應(yīng)用程序中的字體可能會(huì)破壞布局。

如果要改變布局,則必須完全重做布局,這是繁瑣和耗時(shí)的

在有些情況下,我們可能會(huì)使用絕對(duì)定位。例如,小的測(cè)試?yán)印5蠖鄶?shù)情況下,程序員都會(huì)使用sizer。

在我們的例子中,我們有一個(gè)簡(jiǎn)單的文本編輯器的骨架。如果我們調(diào)整窗口的大小,out wx.TextCtrl的大小并沒(méi)有像我們期望的那樣改變。# absolute.py

#absolute.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title,

size=(350, 300))

self.InitUI()

self.Centre()

def InitUI(self):

self.panel = wx.Panel(self)

self.panel.SetBackgroundColour("white")

self.LoadImages()

self.mincol.SetPosition((20, 20))

self.bardejov.SetPosition((40, 160))

self.rotunda.SetPosition((170, 50))

def LoadImages(self):

self.mincol = wx.StaticBitmap(self.panel, wx.ID_ANY,

wx.Bitmap("icon_1.png", wx.BITMAP_TYPE_ANY))

self.bardejov = wx.StaticBitmap(self.panel, wx.ID_ANY,

wx.Bitmap("icon_2.png", wx.BITMAP_TYPE_ANY))

self.rotunda = wx.StaticBitmap(self.panel, wx.ID_ANY,

wx.Bitmap("icon_3.png", wx.BITMAP_TYPE_ANY))

def main():

app = wx.App()

ex = Example(None, title='Absolute positioning')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

在上面的例子中,我們使用絕對(duì)坐標(biāo)定位三個(gè)圖像。self.mincol.SetPosition((20, 20))

通過(guò)SetPosition()方法,我們將圖像放置在x=20,y=20坐標(biāo)處。

使用sizer

Sizer確實(shí)解決了我們提到的所有絕對(duì)定位的問(wèn)題,wxPython有以下sizer。wx.BoxSizer

wx.StaticBoxSizer

wx.GridSizer

wx.FlexGridSizer

wx.GridBagSizer

wx.BoxSizer

wx.BoxSizer 使我們能夠?qū)⒍鄠€(gè)小組件放入一行或一列中。我們可以將另一個(gè)sizer放入一個(gè)現(xiàn)有的sizer中。這樣我們就可以創(chuàng)建非常復(fù)雜的布局。box = wx.BoxSizer(integer orient)

box.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)

方向可以是wx.VERTICAL或wx.HORIZONTAL。在wx.BoxSizer中添加widget是通過(guò)Add()方法完成的。為了理解它,我們需要看看它的參數(shù)。

proportion參數(shù)定義了widgets在定義的方向上的變化比例。假設(shè)我們有三個(gè)比例為0、1和2的按鈕。它們被添加到一個(gè)水平的wx.BoxSizer.Button中。比例為0的按鈕完全不會(huì)改變。比例2的按鈕在水平維度上會(huì)比比例1的按鈕多變化一倍。

通過(guò)flag參數(shù),可以進(jìn)一步配置wx.BoxSizer中組件的行為。我們可以控制組件之間的邊界。我們?cè)诮M件之間添加一些空間,單位是像素。為了應(yīng)用border,我們需要定義border。我們可以用 | 操作符來(lái)組合它們,例如 wx.LEFT | wx.BOTTOM。我們可以在這些標(biāo)志中進(jìn)行選擇。wx.LEFT

wx.RIGHT

wx.BOTTOM

wx.TOP

wx.ALL

通過(guò)setSizer()方法對(duì)面板組件設(shè)置sizer。#border.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.InitUI()

self.Centre()

def InitUI(self):

panel = wx.Panel(self)

panel.SetBackgroundColour('#4f5049')

vbox = wx.BoxSizer(wx.VERTICAL)

midPan = wx.Panel(panel)

midPan.SetBackgroundColour('#ededed')

vbox.Add(midPan, wx.ID_ANY, wx.EXPAND | wx.ALL, 20)

panel.SetSizer(vbox)

def main():

app = wx.App()

ex = Example(None, title='Border')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

在上面的例子中,我們?cè)谝粋€(gè)panel周?chē)胖昧诉吙颉box.Add(midPan, wx.ID_ANY, wx.EXPAND | wx.ALL, 20)

在border.py中,我們已經(jīng)在midPan面板周?chē)胖昧艘粋€(gè)20 px的邊框,wx.ALL將邊框大小應(yīng)用于所有四邊。

如果我們使用wx.EXPAND標(biāo)志,我們的組件將使用所有分配給它的空間。最后,我們還可以定義組件的對(duì)齊方式。通過(guò)以下標(biāo)志來(lái)實(shí)現(xiàn)。wx.ALIGN_LEFT

wx.ALIGN_RIGHT

wx.ALIGN_TOP

wx.ALIGN_BOTTOM

wx.ALIGN_CENTER_VERTICAL

wx.ALIGN_CENTER_HORIZONTAL。

wx.ALIGN_CENTER

類(lèi)的例子

介紹一些重要的思想#go_to_class.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.InitUI()

self.Centre()

def InitUI(self):

panel = wx.Panel(self)

font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)

font.SetPointSize(9)

vbox = wx.BoxSizer(wx.VERTICAL)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)

st1 = wx.StaticText(panel, label='Class Name')

st1.SetFont(font)

hbox1.Add(st1, flag=wx.RIGHT, border=8)

tc = wx.TextCtrl(panel)

hbox1.Add(tc, proportion=1)

vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)

vbox.Add((-1, 10))

hbox2 = wx.BoxSizer(wx.HORIZONTAL)

st2 = wx.StaticText(panel, label='Matching Classes')

st2.SetFont(font)

hbox2.Add(st2)

vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, border=10)

vbox.Add((-1, 10))

hbox3 = wx.BoxSizer(wx.HORIZONTAL)

tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

hbox3.Add(tc2, proportion=1, flag=wx.EXPAND)

vbox.Add(hbox3, proportion=1, flag=wx.LEFT|wx.RIGHT|wx.EXPAND,

border=10)

vbox.Add((-1, 25))

hbox4 = wx.BoxSizer(wx.HORIZONTAL)

cb1 = wx.CheckBox(panel, label='Case Sensitive')

cb1.SetFont(font)

hbox4.Add(cb1)

cb2 = wx.CheckBox(panel, label='Nested Classes')

cb2.SetFont(font)

hbox4.Add(cb2, flag=wx.LEFT, border=10)

cb3 = wx.CheckBox(panel, label='Non-Project classes')

cb3.SetFont(font)

hbox4.Add(cb3, flag=wx.LEFT, border=10)

vbox.Add(hbox4, flag=wx.LEFT, border=10)

vbox.Add((-1, 25))

hbox5 = wx.BoxSizer(wx.HORIZONTAL)

btn1 = wx.Button(panel, label='Ok', size=(70, 30))

hbox5.Add(btn1)

btn2 = wx.Button(panel, label='Close', size=(70, 30))

hbox5.Add(btn2, flag=wx.LEFT|wx.BOTTOM, border=5)

vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10)

panel.SetSizer(vbox)

def main():

app = wx.App()

ex = Example(None, title='Go To Class')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

布局很簡(jiǎn)單。我們創(chuàng)建一個(gè)垂直的定標(biāo)器。然后在其中放入五個(gè)水平縮放器。font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)

font.SetPointSize(9)

我們將字體大小改為9 px。vbox.Add(hbox3, proportion=1, flag=wx.LEFT|wx.RIGHT|wx.EXPAND, border=10)

vbox.Add((-1, 25))

我們已經(jīng)知道,我們可以通過(guò)結(jié)合flag參數(shù)和border參數(shù)來(lái)控制部件之間的距離。但是有一個(gè)真正的限制。在Add()方法中,我們只能為所有給定的邊指定一個(gè)邊框。在我們的例子中,我們給右邊和左邊各10 px。但是我們不能給底部增加25 px的邊框,我們可以做的是給右邊和左邊增加10 px的邊框。我們可以做的是給底部10 px,如果省略wx.BOTTOM,則給底部0 px。所以如果我們需要不同的值,我們可以增加一些額外的空間。通過(guò)Add()方法,我們也可以插入組件和空間。vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10)

我們將兩個(gè)按鈕放在窗口的右側(cè)。要做到這一點(diǎn),有三件事情很重要:porportion,align和 wx.EXPAND 標(biāo)志。porportion必須為零。當(dāng)我們調(diào)整窗口大小時(shí),按鈕的大小不應(yīng)改變。我們不能指定wx.EXPAND標(biāo)志。按鈕只復(fù)制分配給它們的區(qū)域。最后,我們必須指定wx.ALIGN_RIGHT標(biāo)志。水平縮放器從窗口的左邊擴(kuò)展到右邊。所以如果我們指定wx.ALIGN_RIGHT標(biāo)志,按鈕就會(huì)被放置在右邊。

wx.GridSizer

wx.GridSizer在二維表格中布置組件。表格中的每個(gè)單元格都有相同的大小。wx.GridSizer(int rows=1, int cols=0, int vgap=0, int hgap=0)

在構(gòu)造函數(shù)中,我們指定表格中的行數(shù)和列數(shù),以及單元格之間的垂直和水平空間。

在我們的例子中,我們創(chuàng)建了一個(gè)計(jì)算器的骨架。#calculator.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.InitUI()

self.Centre()

def InitUI(self):

menubar = wx.MenuBar()

fileMenu = wx.Menu()

menubar.Append(fileMenu, '&File')

self.SetMenuBar(menubar)

vbox = wx.BoxSizer(wx.VERTICAL)

self.display = wx.TextCtrl(self, style=wx.TE_RIGHT)

vbox.Add(self.display, flag=wx.EXPAND|wx.TOP|wx.BOTTOM, border=4)

gs = wx.GridSizer(5, 4, 5, 5)

gs.AddMany( [(wx.Button(self, label='Cls'), 0, wx.EXPAND),

(wx.Button(self, label='Bck'), 0, wx.EXPAND),

(wx.StaticText(self), wx.EXPAND),

(wx.Button(self, label='Close'), 0, wx.EXPAND),

(wx.Button(self, label='7'), 0, wx.EXPAND),

(wx.Button(self, label='8'), 0, wx.EXPAND),

(wx.Button(self, label='9'), 0, wx.EXPAND),

(wx.Button(self, label='/'), 0, wx.EXPAND),

(wx.Button(self, label='4'), 0, wx.EXPAND),

(wx.Button(self, label='5'), 0, wx.EXPAND),

(wx.Button(self, label='6'), 0, wx.EXPAND),

(wx.Button(self, label='*'), 0, wx.EXPAND),

(wx.Button(self, label='1'), 0, wx.EXPAND),

(wx.Button(self, label='2'), 0, wx.EXPAND),

(wx.Button(self, label='3'), 0, wx.EXPAND),

(wx.Button(self, label='-'), 0, wx.EXPAND),

(wx.Button(self, label='0'), 0, wx.EXPAND),

(wx.Button(self, label='.'), 0, wx.EXPAND),

(wx.Button(self, label='='), 0, wx.EXPAND),

(wx.Button(self, label='+'), 0, wx.EXPAND) ])

vbox.Add(gs, proportion=1, flag=wx.EXPAND)

self.SetSizer(vbox)

def main():

app = wx.App()

ex = Example(None, title='Calculator')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

請(qǐng)注意,我們是如何在Bck和Close按鈕之間放置一個(gè)空格的。我們只是在那里放了一個(gè)空的wx.StaticText。

在我們的例子中,我們使用了AddMany()方法。它是一個(gè)方便的方法,用于一次添加多個(gè)組件。gs.AddMany( [(wx.Button(self, label='Cls'), 0, wx.EXPAND),

...

組件按照添加順序放置在表格內(nèi)。第一行先填,然后第二行...。

wx.FlexGridSizer

這個(gè)縮放器類(lèi)似于wx.GridSizer。它也是在一個(gè)二維的表格中布置它的部件,它增加了一些靈活性。wx.GridSizer的單元格大小相同。wx.FlexGridSizer中的所有單元格在一行中具有相同的高度。在一列中,所有的單元格都有相同的寬度。但所有的行和列不一定是相同的高度或?qū)挾取x.FlexGridSizer(int rows=1, int cols=0, int vgap=0, int hgap=0)

vgap和hgap在兩個(gè)方向上增加了一些部件之間的空間。

很多時(shí)候,開(kāi)發(fā)人員必須開(kāi)發(fā)對(duì)話框來(lái)輸入和修改數(shù)據(jù)。我發(fā)現(xiàn)wx.FlexGridSizer適合這樣的任務(wù)。開(kāi)發(fā)者可以很容易地用這個(gè)sizer設(shè)置一個(gè)對(duì)話框窗口。也可以用wx.GridSizer來(lái)完成這個(gè)任務(wù),但它看起來(lái)并不好看,因?yàn)槊總€(gè)單元格必須有相同的大小。#review.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.InitUI()

self.Centre()

self.Show()

def InitUI(self):

panel = wx.Panel(self)

hbox = wx.BoxSizer(wx.HORIZONTAL)

fgs = wx.FlexGridSizer(3, 2, 9, 25)

title = wx.StaticText(panel, label="Title")

author = wx.StaticText(panel, label="Author")

review = wx.StaticText(panel, label="Review")

tc1 = wx.TextCtrl(panel)

tc2 = wx.TextCtrl(panel)

tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author),

(tc2, 1, wx.EXPAND), (review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)])

fgs.AddGrowableRow(2, 1)

fgs.AddGrowableCol(1, 1)

hbox.Add(fgs, proportion=1, flag=wx.ALL|wx.EXPAND, border=15)

panel.SetSizer(hbox)

def main():

app = wx.App()

ex = Example(None, title='Review')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

在上面的代碼示例中,我們用FlexGridSizer創(chuàng)建一個(gè)Review窗口。hbox = wx.BoxSizer(wx.HORIZONTAL)

...

hbox.Add(fgs, proportion=1, flag=wx.ALL|wx.EXPAND, border=15)

我們創(chuàng)建了一個(gè)水平框的大小,以便在組件表格周?chē)胖靡恍┛臻g(15 px)。fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author),

(tc2, 1, wx.EXPAND), (review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)])

我們使用AddMany()方法為sizer添加widget。wx.FlexGridSizer和wx.GridSizer都共享這個(gè)方法。fgs.AddGrowableRow(2, 1)

fgs.AddGrowableCol(1, 1)

我們讓第三行和第二列可以增長(zhǎng)。這樣我們就可以讓文本控件在窗口調(diào)整大小時(shí)增長(zhǎng)。前兩個(gè)文本控件將在水平方向上增長(zhǎng),第三個(gè)控件將在兩個(gè)方向上增長(zhǎng)。我們不要忘記用wx.EXPAND使組件可擴(kuò)展,這樣才能使它工作。

wx.GridBagSizer

wx.GridBagSizer是wxPython中最靈活的sizer。這種sizer并不只是在wxPython中才有,我們?cè)谄渌ぞ甙幸材苷业剿?/p>

這種sizer可以實(shí)現(xiàn)項(xiàng)目的顯式定位。項(xiàng)目也可以選擇跨越多行或多列。wx.GridBagSizer有一個(gè)簡(jiǎn)單的構(gòu)造函數(shù)。wx.GridBagSizer(integer vgap, integer hgap)

垂直和水平的間隙定義了所有子項(xiàng)目之間的像素空間。我們使用Add()方法向網(wǎng)格中添加項(xiàng)目。Add(self, item, tuple pos, tuple span=wx.DefaultSpan, integer flag=0,

integer border=0, userData=None)

Item是一個(gè)插入到網(wǎng)格中的組件。pos指定了在虛擬網(wǎng)格中的位置,左上角單元格的pos為(0, 0)。span是一個(gè)可選的跨度,例如(3, 2)跨度是指跨度為3行2列的部件。flag和border在前面由wx.BoxSizer討論過(guò)。當(dāng)窗口被調(diào)整大小時(shí),網(wǎng)格中的項(xiàng)目可以改變它們的大小或保持默認(rèn)大小。如果我們想讓你的項(xiàng)目增長(zhǎng)和縮小,我們可以使用下面兩個(gè)方法。AddGrowableRow(integer row)

AddGrowableCol(integer col)

重命名窗口示例

在第一個(gè)例子中,我們創(chuàng)建一個(gè)Rename窗口。它將有一個(gè)wx.StaticText、一個(gè)wx.TextCtrl和兩個(gè)wx.Button 組件。#rename.py

import wx

class Example(wx.Frame):

def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.InitUI()

self.Centre()

def InitUI(self):

panel = wx.Panel(self)

sizer = wx.GridBagSizer(4, 4)

text = wx.StaticText(panel, label="Rename To")

sizer.Add(text, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

tc = wx.TextCtrl(panel)

sizer.Add(tc, pos=(1, 0), span=(1, 5),

flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

buttonOk = wx.Button(panel, label="Ok", size=(90, 28))

buttonClose = wx.Button(panel, label="Close", size=(90, 28))

sizer.Add(buttonOk, pos=(3, 3))

sizer.Add(buttonClose, pos=(3, 4), flag=wx.RIGHT|wx.BOTTOM, border=10)

sizer.AddGrowableCol(1)

sizer.AddGrowableRow(2)

panel.SetSizer(sizer)

def main():

app = wx.App()

ex = Example(None, title='Rename')

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

我們把窗口看成一個(gè)大的網(wǎng)格表。text = wx.StaticText(panel, label="Rename To")

sizer.Add(text, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=10)

"Rename To "的文字走到左上角。所以我們指定(0,0)的位置。而且我們?cè)诘撞俊⒆髠?cè)、底部都加了一些空格。tc = wx.TextCtrl(panel)

sizer.Add(tc, pos=(1, 0), span=(1, 5) flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

wx.TextCtrl轉(zhuǎn)到第二行的開(kāi)頭(1, 0)。記住,我們從零開(kāi)始計(jì)算。它展開(kāi)了1行5列(1, 5)。而且我們?cè)谛〗M件的左邊和右邊放了5個(gè)像素的空間。sizer.Add(buttonOk, pos=(3, 3))

sizer.Add(buttonClose, pos=(3, 4), flag=wx.RIGHT|wx.BOTTOM, border=10)

我們?cè)诘谒男兄蟹湃雰蓚€(gè)按鈕,第三行留空,以便在wx.TextCtrl和按鈕之間留出一些空間。第三行留空,這樣我們?cè)趙x.TextCtrl和按鈕之間就有了一些空間。我們將 "Ok "按鈕放入第四行,將 "Close "按鈕放入第五行。請(qǐng)注意,一旦我們?cè)谝粋€(gè)部件上應(yīng)用了一些space,它就會(huì)應(yīng)用到整行。sizer.AddGrowableCol(1)

sizer.AddGrowableRow(2)

最后,我們必須做的是使我們的對(duì)話框可以調(diào)整大小。我們使第二列和第三行可以增長(zhǎng)。現(xiàn)在我們可以擴(kuò)大或縮小我們的窗口。試著注釋這兩行,看看會(huì)發(fā)生什么。

增加類(lèi)的例子

在接下來(lái)的例子中,我們創(chuàng)建一個(gè)窗口,它可以在JDeveloper中找到。它是一個(gè)在Java中創(chuàng)建新類(lèi)的窗口。#new_class.py

import wx

class Example(wx.Frame):

def __init__(self,parent,title):

super(Example,self).__init__(parent,title=title)

self.InitUI()

self.Centre()

def InitUI(self):

panel=wx.Panel(self)

sizer=wx.GridBagSizer(5,5)

text1=wx.StaticText(panel,label="Java Class")

sizer.Add(text1,pos=(0,0),flag=wx.TOP | wx.LEFT | wx.BOTTOM,

border=15)

icon=wx.StaticBitmap(panel,bitmap=wx.Bitmap('icon_1.png'))

sizer.Add(icon,pos=(0,4),flag=wx.TOP | wx.RIGHT | wx.ALIGN_RIGHT,

border=5)

line=wx.StaticLine(panel)

sizer.Add(line,pos=(1,0),span=(1,5),

flag=wx.EXPAND | wx.BOTTOM,border=10)

text2=wx.StaticText(panel,label="Name")

sizer.Add(text2,pos=(2,0),flag=wx.LEFT,border=10)

tc1=wx.TextCtrl(panel)

sizer.Add(tc1,pos=(2,1),span=(1,3),flag=wx.TOP | wx.EXPAND)

text3=wx.StaticText(panel,label="Package")

sizer.Add(text3,pos=(3,0),flag=wx.LEFT | wx.TOP,border=10)

tc2=wx.TextCtrl(panel)

sizer.Add(tc2,pos=(3,1),span=(1,3),flag=wx.TOP | wx.EXPAND,

border=5)

button1=wx.Button(panel,label="Browse...")

sizer.Add(button1,pos=(3,4),flag=wx.TOP | wx.RIGHT,border=5)

text4=wx.StaticText(panel,label="Extends")

sizer.Add(text4,pos=(4,0),flag=wx.TOP | wx.LEFT,border=10)

combo=wx.ComboBox(panel)

sizer.Add(combo,pos=(4,1),span=(1,3),

flag=wx.TOP | wx.EXPAND,border=5)

button2=wx.Button(panel,label="Browse...")

sizer.Add(button2,pos=(4,4),flag=wx.TOP | wx.RIGHT,border=5)

sb=wx.StaticBox(panel,label="Optional Attributes")

boxsizer=wx.StaticBoxSizer(sb,wx.VERTICAL)

boxsizer.Add(wx.CheckBox(panel,label="Public"),

flag=wx.LEFT | wx.TOP,border=5)

boxsizer.Add(wx.CheckBox(panel,label="Generate Default Constructor"),

flag=wx.LEFT,border=5)

boxsizer.Add(wx.CheckBox(panel,label="Generate Main Method"),

flag=wx.LEFT | wx.BOTTOM,border=5)

sizer.Add(boxsizer,pos=(5,0),span=(1,5),

flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT,border=10)

button3=wx.Button(panel,label='Help')

sizer.Add(button3,pos=(7,0),flag=wx.LEFT,border=10)

button4=wx.Button(panel,label="Ok")

sizer.Add(button4,pos=(7,3))

button5=wx.Button(panel,label="Cancel")

sizer.Add(button5,pos=(7,4),span=(1,1),

flag=wx.BOTTOM | wx.RIGHT,border=10)

sizer.AddGrowableCol(2)

panel.SetSizer(sizer)

sizer.Fit(self)

def main():

app=wx.App()

ex=Example(None,title="Create Java Class")

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

這是一個(gè)比較復(fù)雜的布局。我們同時(shí)使用wx.GridBagSizer和wx.StaticBoxsizer。line = wx.StaticLine(panel)

sizer.Add(line, pos=(1, 0), span=(1, 5)。

flag=wx.EXPAND|wx.BOTTOM, border=10)

這一行是用來(lái)分隔布局中的控件件組的。icon = wx.StaticBitmap(panel, bitmap=wx.Bitmap('exec.png'))

sizer.Add(icon, pos=(0, 4), flag=wx.TOP|wx.RIGHT|wx.ALIGN_RIGHT,

border=5)

我們將一個(gè)wx.StaticBitmap放入網(wǎng)格的第一行。我們將其放置在該行的右側(cè)。sb = wx.StaticBox(panel, label="Optional Attributes")

boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)

wxStaticBoxSizer和普通的wx.BoxSizer一樣,但它在sizer周?chē)砑恿艘粋€(gè)靜態(tài)框。我們將復(fù)選框放入靜態(tài)框中。

總結(jié)

以上是生活随笔為你收集整理的wxpython制作表格界面_wxpython入门第二步(布局)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。