wxPython使用窗口

来源:互联网 发布:node.js base64解码 编辑:程序博客网 时间:2024/05/28 05:15

使用窗口

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,主要有垂直布局和嵌入一个与水平布局:


[python] view plaincopy
  1. ''''' 
  2. Created on 2012-6-30 
  3.  
  4. @author: Administrator 
  5. '''  
  6. import os  
  7. import wx  
  8. class MainWindow(wx.Frame):  
  9.     def __init__(self,parent,title):  
  10.         self.dirname = ''  
  11.         wx.Frame.__init__(self,parent,title=title,size=(500,350))  
  12.         self.control = wx.TextCtrl(self,style=wx.TE_MULTILINE)  
  13.         self.CreateStatusBar()  
  14.           
  15.         filemenu = wx.Menu()  
  16.         menuOpen = filemenu.Append(wx.ID_OPEN,"&Open","Open a file to edit")  
  17.         menuAbout = filemenu.Append(wx.ID_ABOUT,"&About","about this program")  
  18.         menuExit = filemenu.Append(wx.ID_EXIT,"E&xit","close this program")  
  19.           
  20.         menuBar = wx.MenuBar()  
  21.         menuBar.Append(filemenu,"&File")  
  22.         self.SetMenuBar(menuBar)  
  23.           
  24.         self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen)  
  25.         self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout)  
  26.         self.Bind(wx.EVT_MENU, self.OnExit, menuExit)  
  27.           
  28.         self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)  
  29.         self.buttons = []  
  30.         for i in range(0,6):  
  31.             self.buttons.append(wx.Button(self,-1,"Button &" + str(i)))  
  32.             self.sizer2.Add(self.buttons[i],1,wx.EXPAND)  
  33.               
  34.         self.sizer = wx.BoxSizer(wx.VERTICAL)  
  35.         self.sizer.Add(self.control,1,wx.EXPAND)  
  36.         self.sizer.Add(self.sizer2,0,wx.EXPAND)  
  37.           
  38.         self.SetSizer(self.sizer)  
  39.         self.SetAutoLayout(1)  
  40.         self.sizer.Fit(self)  
  41.           
  42.         self.Show()  
  43.     def OnOpen(self,e):  
  44.         dlg = wx.FileDialog(self,"choose a file",self.dirname,"","*.*",wx.OPEN)  
  45.         if dlg.ShowModal() == wx.ID_OK:  
  46.             self.filename = dlg.GetFilename()  
  47.             self.dirname = dlg.GetDirectory()  
  48.             f = open(os.path.join(self.dirname,self.filename),'r')  
  49.             self.control.SetValue(f.read())  
  50.             f.close()  
  51.         dlg.Destroy()  
  52.     def OnAbout(self,e):  
  53.         dlg = wx.MessageDialog(self,"A sample editor \n in wxPython","About samll Editor")  
  54.         dlg.ShowModal()  
  55.         dlg.Destroy()  
  56.     def OnExit(self,e):  
  57.         self.Close()  
  58.       
  59. app = wx.App(False)  
  60. frame = MainWindow(None,"Small Editor")  
  61. app.MainLoop() 
原创粉丝点击