使用窗口
Frames
Windows
Controls/Widgets
Sizers
Validators
在本節中,我們將呈現方式與windows wxPython交易及其內容,包括構建輸入表單和使用各種小部件/控制。我們要建立一個小程序來計算價格的引用。如果你已經是一個有經驗的GUI開發人員,這將是容易的。
概覽
可見的佈局元素
在一個框架中,您將使用大量的wxWindow子類來充實框架的內容。這裏有一些更常見的元素,你可能想要放到你的框架:
A wx.MenuBar, 沿着你的窗口最上面放置菜單
A wx.StatusBar, 您的框架顯示狀態消息
A wx.ToolBar, 一個工具欄
wx.Control的子類. 這些都是對象,它代表的用戶界面小部件 wx.Control 包括 wx.Button, wxStaticText, wx.TextCtrl and wx.ComboBox.
A wx.Panel,這是一個窗口來放置wx.Control 對象.
wx.Frame包括了:wxMenuBar與兩個wxPanel
注意:
1.你可以手動位置每個元素通過指定它的確切父窗口內的像素座標。因爲不同的字體大小,等等,在平臺之間,這個選項通常不推薦
2.你可以使用wx.LayoutConstraints,儘管這些都是相當複雜的使用
3.你可以使用類似Delphi的LayoutAnchors,它使wx.LayoutConstraints變得容易。
4.你可以使用其中一個wxSizer子類。
那我們來看看Sizer,它能做什麼?
1.對於每個視覺元素計算出一個合適的大小
2.按照一定的規律定位元素
3.動態調整和/或重新定位元素
一些更常見的類型的sizer包括:
wx.BoxSizer, 負責安排視覺要素在一行的水平或垂直.
wx.GridSizer, 網格狀結構.
wx.FlexGridSizer, GridSizer之外,它允許更靈活的佈局的視覺元素.
注意:上面的例子並沒有擺出了六個按鈕到兩行三列每個-要做到這一點,你應該使用一個wxGridSizer。
在接下來的例子中,我們使用兩個嵌套sizer,主要有垂直佈局和嵌入一個與水平佈局:
'''
Created on 2012-6-30
@author: Administrator
'''
import os
import wx
class MainWindow(wx.Frame):
def __init__(self,parent,title):
self.dirname = ''
wx.Frame.__init__(self,parent,title=title,size=(500,350))
self.control = wx.TextCtrl(self,style=wx.TE_MULTILINE)
self.CreateStatusBar()
filemenu = wx.Menu()
menuOpen = filemenu.Append(wx.ID_OPEN,"&Open","Open a file to edit")
menuAbout = filemenu.Append(wx.ID_ABOUT,"&About","about this program")
menuExit = filemenu.Append(wx.ID_EXIT,"E&xit","close this program")
menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File")
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen)
self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout)
self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.buttons = []
for i in range(0,6):
self.buttons.append(wx.Button(self,-1,"Button &" + str(i)))
self.sizer2.Add(self.buttons[i],1,wx.EXPAND)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.control,1,wx.EXPAND)
self.sizer.Add(self.sizer2,0,wx.EXPAND)
self.SetSizer(self.sizer)
self.SetAutoLayout(1)
self.sizer.Fit(self)
self.Show()
def OnOpen(self,e):
dlg = wx.FileDialog(self,"choose a file",self.dirname,"","*.*",wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
self.filename = dlg.GetFilename()
self.dirname = dlg.GetDirectory()
f = open(os.path.join(self.dirname,self.filename),'r')
self.control.SetValue(f.read())
f.close()
dlg.Destroy()
def OnAbout(self,e):
dlg = wx.MessageDialog(self,"A sample editor \n in wxPython","About samll Editor")
dlg.ShowModal()
dlg.Destroy()
def OnExit(self,e):
self.Close()
app = wx.App(False)
frame = MainWindow(None,"Small Editor")
app.MainLoop()