搜档网
当前位置:搜档网 › wxPython中文教程 简单入门加实例

wxPython中文教程 简单入门加实例

wxPython中文教程 简单入门加实例
wxPython中文教程 简单入门加实例

wxPython中文教程简单入门加实例

博客分类:

Python 2 / Wxpython

wxPythonPython编程浏览器脚本

wx.Window 是一个基类,许多构件从它继承。包括 wx.Frame 构件。技术上这意味着,我们可以在所有的

子类中使用 wx.Window 的方法。我们这里介绍它的几种方法:

* SetTitle( string title ) ——设置窗口标题。只可用于框架和对话框。* SetToolTip( wx.ToolTip tip ) ——为窗口添加提示。

* SetSize( wx.Size size ) ——设置窗口的尺寸。

* SetPosition( wx.Point pos ) ——设置窗口出现的位置。

* Show( show = True ) ——显示或隐藏窗口。其中的参数可以为 True 或False。

* Move( wx.Point pos ) ——将窗口移动到指定位置。

* SetCursor( wx.StockCursor id ) ——设置窗口的鼠标指针样式。

Python代码

1.import wx

2.app = wx.PySimpleApp()

3.frame = wx.Frame( None, -1, '' )

4.frame.SetToolTip( wx.ToolTip( 'This is a frame' ) )

5.frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) )

6.frame.SetPosition( wx.Point( 0, 0 ) )

7.frame.SetSize( wx.Size( 300, 250 ) )

8.frame.SetTitle( 'simple2.py' )

9.frame.Show()

10.app.MainLoop()

我们创建了一个"This is a frame"提示。鼠标指针被设置为放大镜样式。可用的鼠标指针样式有:

wx.CURSOR_ARROW

wx.CURSOR_RIGHT_ARROW

wx.CURSOR_BLANK

wx.CURSOR_BULLSEYE

wx.CURSOR_CHAR

wx.CURSOR_CROSS

wx.CURSOR_HAND

wx.CURSOR_IBEAM

wx.CURSOR_LEFT_BUTTON

wx.CURSOR_MAGNIFIER

wx.CURSOR_MIDDLE_BUTTON

wx.CURSOR_NO_ENTRY

wx.CURSOR_PAINT_BRUSH

wx.CURSOR_PENCIL

wx.CURSOR_POINT_LEFT

wx.CURSOR_POINT_RIGHT

wx.CURSOR_QUESTION_ARROW

wx.CURSOR_RIGHT_BUTTON

wx.CURSOR_SIZENESW

wx.CURSOR_SIZENS

wx.CURSOR_SIZENWSE

wx.CURSOR_SIZEWE

wx.CURSOR_SIZING

wx.CURSOR_SPRAYCAN

wx.CURSOR_WAIT

wx.CURSOR_WATCH

wx.CURSOR_ARROWWAIT

我们把窗口放在了左上角,大小是 300x250 像素,标题被设置为"simple2.py"。

===================================================================== =

wx.Frame 是一个容器构件。这意味着它可以容纳其它构件。它有如下的构造器:

wx.Frame( wx.Window parent, id, string title, wx.Point

pos=wx.DefaultPosition, wx.Size size=wx.DefaultSize, style =

wx.DEFAULT_FRAME_STYEL, string name='frame' )

构造器是一种特殊的函数。它在对象创建时被调用。对于我们来说重要的是,我们打算创建一个新的构件时,只要简单的调用它的构造器就行了。Python允许参数有默认值。所以在wx.Frame中必须的参数就只剩下了parent、id和title 了。如果你按顺序指定参数的值,那么你可以不必带上参数的名称。比如你想创建一个wx.Frame构件,它没有parent,标识符是100,标题是"Title",位置在(100,50)大小是 (100,100):

frame=wx.Frame(None,100,'Title',wx.Point(100,50),wx.Size(100,100)) 下面我们省略了 pos 参数。所以必须明确的提供 size 参数:

frame=wx.Frame(None,100,'Title',size=wx.Size(100,100))

下面的例子,我们将使用其它有用的特性:

Python代码

1.import wx

2.def main():

3.app=wx.PySimpleApp()

4.frame=wx.Frame(None,-1,'Icon',wx.DefaultPosition,wx.Size(350,30

0))

5.frame.SetIcon(wx.Icon('Tipi.ico',wx.BITMAP_TYPE_ICO))

6.frame.Center()

7.frame.Show()

8.app.MainLoop()

9.if __name__ == '__main__':

10.main()

Icon文件名为Iipi.ico。位于当前目录下。Icon构造器的第一个参数是Icon 文件名,第二个参数是 Icon 文件类型。

就像你注意到的,程序的结构发生了改变。这样才符合Python编程的标准。

在Python中,__name__ 是一个特殊的变量。更复杂的程序通常由几个文件组成,但仅有一个文件用于开启程序。对于这个文件,当你直接执行它时,Python设

置__name__变量的值为'__main__'。所以,如果你双击icon.py或从命令行直接执行它,__name__ 变量的值就会等于__main__。main()函数也就会被调用。

===================================================================== =

创建一个菜单栏在wxPython中相当简单。我们将讨论给菜单栏添加菜单、为已经存在的菜单添加子菜单。所有菜单都有菜单项组成。菜单项可以是常规项、复选项以及单选项。

先来创建一个菜单栏:

menubar = wx.MenuBar()

接着创建我们的菜单:

file = wx.Menu()

edit = wx.Menu()

help = wx.Menu()

然后为菜单添加菜单项。做这件事有两种方式:

file.Append( 101, '&Open', 'Open a new document' )

file.Append( 102, '&Save', 'Save the document' )

我们可以使用横线来分隔逻辑区域:

file.AppendSeparator()

如果你想在菜单中使用 Icon,你需要手工创建 MenuItem 对象:

quit=wx.MenuItem(file,105,'&Quit\tCtrl+Q','Quit the Application') quit.SetBitmap(wx.Image('stock_exit-16.png',

wx.BITMAP_TYPE_PNG).ConvertToBitmap())

file.AppendItem(quit)

wxPython工具包只能把bitmap图片用于菜单,所以我们需要把我们的PNG图片转换为bitmap格式。

然后把菜单加入到菜单栏:

menubar.Append( file, '&File' )

menubar.Append( edit, '&Edit' )

menubar.Append( help, '&Help' )

最后在我们的程序类中创建菜单栏:

self.SetMenuBar( menubar )

我们把上述这些组成个小脚本:

Python代码

1.#!/usr/bin/env python

2.# FileName: menu1.py

3.import wx

4.class MyMenu( wx.Frame ):

5.def __init__(self,parent,ID,title):

6.wx.Frame.__init__(self,parent,-1,title,wx.DefaultPosition,wx.Si

ze(200, 150))

7.menubar=wx.MenuBar()

8.file=wx.Menu()

9.edit=wx.Menu()

10.help=wx.Menu()

11.file.Append(101,'&Open','Open a new document')

12.file.Append(102,'&Save','Save the document')

13.file.AppendSeparator()

14.quit=wx.MenuItem(file,105,'&Quit\tCtrl+Q','Quit the Application

')

15.quit.SetBitmap(wx.Image('stock_exit-16.png', wx.BITMAP_TYPE_PNG

).ConvertToBitmap())

16.file.AppendItem(quit)

17.menubar.Append(file,'&File')

18.menubar.Append(edit,'&Edit')

19.menubar.Append(help,'&Help')

20.self.SetMenuBar( menubar )

21.

22.class MyApp(wx.App):

23.def OnInit(self):

24.frame=MyMenu(None,-1,'menu1.py')

25.frame.Show(True)

26.return True

27.

28.app=MyApp(0)

29.app.MainLoop()

到目前为止我们已经知道了如何定义默认的普通菜单项。接下来让我们看看如何明确的定义复选菜单项和单选菜单项:

edit.Append( 201, 'check item1', '', wx.ITEM_CHECK )

edit.Append( 202, 'check item2', '', kind=wx.ITEM_CHECK )

或者

quit=wxMenuItem(file,105,'&Quit\tCtrl+Q','Quit the Application',

wx.ITEM_NORMAL)

其中那个参数被称为种类。

可选的种类有:

* wx.ITEM_NORMAL ——默认

* wx.ITEM_CHECK ——复选

* wx.ITEM_RADIO ——单选

如果你想创建子菜单,要先创建一个菜单:

submenu = wx.Menu()

然后为此子菜单添加一些菜单项:

submenu.Append( 301, 'radio item1', kind= wx.ITEM_RADIO )

submenu.Append( 302, 'radio item2', kind=wx.ITEM_RADIO )

submenu.Append( 303, 'radio item3', kind=wx.ITEM_RADIO )

把子菜单添加到某个菜单对象就成了:

edit.AppendMenu( 203, 'submenu', submenu )

最后,我们来看一下如何响应用户的动作。我们只是简单的感受一下。后面会有更详细的解释。

当用户选择了某个菜单项时,就产生了一个事件。我们必须提供一个事件处理器,用它反应相应的事件。在 wxPython 中处理事件是到目前为止我已知最优雅最简单的了。如果翻参考手册,你会发现 wx.EVT_MENU 处理在事件处理那章。

假如我们想为 quit 菜单项添加一个事件处理器:

wx.EVT_MENU( self, 105, self.OnQuit )

我们需要提供三个信息。我们要把事件处理器绑定到的那个对象。这里是 self, 程序的主对象。与之相匹配的菜单项的 id。以及处理事件的方法的名称。

对用户的动作做出反应的方法需要两个参数。第一个是方法定义于其中的那个对象。第二个是产生的事件。本例中,我们什么也不做,只是简单的关闭我们的程序:

def OnQuit( self, event ):

self.Close()

下面的脚本会展示上面说的各种菜单项、子菜单以及一个简单的事件处理。我讨厌程序窗口出现在角落里,所以加上了:

self.Centre()

这样窗口就会出现在屏幕的当中。

Python代码

1.#!/usr/bin/python

2.# FileName: menu2.py

3.import wx

4.

5.class MyMenu(wx.Frame):

6.def __init__(self, parent, ID, title):

7.wx.Frame.__init__(self, parent, -1, title,

8.wx.DefaultPosition, wx.Size(380, 250))

9.menubar = wx.MenuBar()

10.file = wx.Menu()

11.edit = wx.Menu()

12.help = wx.Menu()

13.file.Append(101, '&Open', 'Open a new document')

14.file.Append(102, '&Save', 'Save the document')

15.file.AppendSeparator()

16.quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Applic

ation')

17.quit.SetBitmap(wx.Image ('gtk-quit.png',

18.wx.BITMAP_TYPE_PNG).ConvertToBitmap())

19.file.AppendItem(quit)

20.edit.Append(201, 'check item1', '', wx.ITEM_CHECK)

21.edit.Append(202, 'check item2', kind= wx.ITEM_CHECK)

22.submenu = wx.Menu()

23.submenu.Append(301, 'radio item1', kind=wx.ITEM_RADIO)

24.submenu.Append(302, 'radio item2', kind=wx.ITEM_RADIO)

25.submenu.Append(303, 'radio item3', kind= wx.ITEM_RADIO)

26.edit.AppendMenu(203, 'submenu', submenu)

27.menubar.Append(file, '&File')

28.menubar.Append(edit, '&Edit')

29.menubar.Append(help, '&Help')

30.self.SetMenuBar(menubar)

31.self.Centre()

32.

33.wx.EVT_MENU(self, 105, self.OnQuit)

34.def OnQuit(self, event):

35.self.Close()

36.class MyApp(wx.App):

37.def OnInit(self):

38.frame = MyMenu(None, -1, 'menu2.py')

39.frame.Show(True)

40.return True

41.app = MyApp(0)

42.app.MainLoop()

===================================================================== =

工具栏是一个集合了大多数常用命令和动作的构件。典型的象保存、打开、剪切、复制、粘贴、撤销、重复等。目的是为了节省时间。从工具栏执行动作只需点击一下,而从菜单需要点击两下。

Python代码

1.#!/usr/bin/env python

2.# FileName: toolbar.py

3.import wx

4.class MyToolBar( wx.Frame ):

5.

6.def __init__( self, parent, ID, title ):

7.wx.Frame.__init__( self, parent, ID, title, wx.DefaultPosition,

wx.Size( 350, 250 ) )

8.

9.vbox = wx.BoxSizer( wx.VERTICAL )

10.toolbar = wx.ToolBar( self, -1, style=wx.TB_HORIZONTAL | wx.NO_

BORDER )

11.toolbar.AddSimpleTool( 1, wx.Image( 'stock_new.png', wx.BITMAP_

TYPE_PNG ).ConvertToBitmap(), 'New', '' )

12.toolbar.AddSimpleTool( 2, wx.Image( 'stock_open.png', wx.BITMAP

_TYPE_PNG ).ConvertToBitmap(), 'Opne', '' )

13.toolbar.AddSimpleTool( 3, wx.Image( 'stock_save.png', wx.BITMAP

_TYPE_PNG ).ConvertToBitmap(), 'Save', '' )

14.toolbar.AddSeparator()

15.toolbar.AddSimpleTool( 4, wx.Image( 'stock_exit.png', wx.BITMAP

_TYPE_PNG ).ConvertToBitmap(), 'Exit', '' )

16.toolbar.Realize()

17.

18.vbox.Add( toolbar, 0, border=5 )

19.self.SetSizer( vbox )

20.self.statusbar = self.CreateStatusBar()

21.

22.self.Centre()

23.

24.wx.EVT_TOOL( self, 1, self.OnNew )

25.wx.EVT_TOOL( self, 2, self.OnOpen )

26.wx.EVT_TOOL( self, 3, self.OnSave )

27.wx.EVT_TOOL( self, 4, self.OnExit )

28.

29.def OnNew( self, event ):

30.self.statusbar.SetStatusText( 'New Command' )

31.

32.def OnOpen( self, event ):

33.self.statusbar.SetStatusText( 'Open Command' )

34.

35.def OnSave( self, event ):

36.self.statusbar.SetStatusText( 'Save Command' )

37.

38.def OnExit( self, event ):

39.self.Close()

40.

41.class MyApp( wx.App ):

42.def OnInit( self ):

43.frame = MyToolBar( None, -1, ' toolbar.py' )

44.frame.Show( True )

45.return True

46.

47.app = MyApp( 0 )

48.app.MainLoop()

wx.BoxSizer 在后面的布局章节会解释到。工具栏构件通过三步创建。

首先,我们创建一个工具栏对象。

tollbar = wx.ToolBar( self, -1, style= wx.TB_HORIZONTAL | wx.NO_BORDER )

然后我们使用 AddSimpleTool() 方法为工具栏添加了几个工具。你在参考手册中找不到这个方法。它是一个 wxPython 扩展。这既是个诅语也是个祝福。它合Python 编程变得容易。但另一方面,这些扩展没有被写入文档。你不得不通过浏览源代码、demo 或者在邮件列表中提问来了解它们。

toolbar.AddSimpleTool(1,wx.Image('stock_new.png',wx.BITMAP_TYPE_PNG). ConvertToBitmap(),'New','')

最后,我们调用 Realize() 方法。这个方法显示工具栏构件。

toolbar.Realize()

工具栏有好几个事件处理顺。当你点击工具栏上的图标时,就会产生一个

wx.EVT_COMMAND_TOOL_CLICKED事件。我们把此事件绑定的某个具体的

wx.EVT_TOOL处理器方法上。

为了显示相关的输出,我们创建了一个状态栏。

self.statusbar = self.CreateStatusBar()

这仍然是另外一个 wxPython 扩展。这样一旦我们点击工具栏按纽,状态栏就会显示相关信息。这是通过使用 SetStatusText() 方法达成的。

===================================================================== =

有两种基本的方法可以用来布置我们的构件。第一种是手工布置。我们通过在构造器中指定位置来摆放我们的构件。

Python代码

1.#!/usr/bin/evn python

2.import wx

3.class MyFrame(wx.Frame):

4.def __init__(self,parent,ID,title):

5.wx.Frame.__init__(self,parent,ID,title,wx.DefaultPosition,wx.Si

ze(250,50))

6.panel=wx.Panel(self,-1)

7.

8.wx.Button(panel,-1,'Button1',(0,0))

9.wx.Button(panel,-1,'Button2',(80,0))

10.wx.Button(panel,-1,'Button3',(160,0))

11.

12.class MyApp(wx.App):

13.def OnInit(self):

14.frame=MyFrame(None,-1,'layout.py')

15.frame.Show(True)

16.frame.Centre()

17.

18.app = MyApp(0)

19.app.MainLoop()

当窗口大小改变时,按纽的大小和位置并不改变。这是手工设置构件位置的一个主要特征。第二种方法是使用布局管理器。这是现实程序中比较流行的方法。基本上你要使用 sizer。我们将讨论:

* wx.BoxSizer

* wx.StaticBoxSizer

* wx.GridSizer

* wx.GridBagSizer

===================================================================== =

我们来写一个程序,它的窗口顶部的一行被三个按纽占据。这些按纽会随窗口的改变而改变。

Python代码

1.#!/usr/bin/env python

2.# FileName: wxboxsizer.py

3.import wx

4.class MyFrame(wx.Frame):

5.def __init__(self,parent,ID,title):

6.wx.Frame.__init__(self,parent,ID,title,(-1,-1),wx.Size(250,50))

7.panel=wx.Panel(self,-1)

8.box=wx.BoxSizer(wx.HORIZONTAL)

9.box.Add( wx.Button( panel, -1, 'Button1' ), 1 )

10.box.Add( wx.Button( panel, -1, 'Button2' ), 1 )

11.box.Add( wx.Button( panel, -1, 'Button3' ), 1 )

12.

13.panel.SetSizer(box)

14.self.Centre()

15.

16.class MyApp(wx.App):

17.def OnInit(self):

18.frame = MyFrame( None, -1, 'wxboxsizer.py' )

19.frame.Show(True)

20.return True

21.

22.app = MyApp(0)

23.app.MainLoop()

我既可水平的摆放构件,也可竖直的摆放。

box = wx.BoxSizer( integer orient )

其中的方向(orient)可以是 wx.VERTICAL 或 wx.HORIZONTAL。将构件加入wx.BoxSizer 要使用 Add() 方法。为了理解,我们来看一下它的参数。

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

其中的 proportion 参数定义了在定义的方向上构件改变的比例。假设我们有三个按纽,它们的 proportion 属性分别为0、1和2。它们被加入一个水平的wx.BoxSizer。proportion 参数为 0 的按纽根本不发生变化。而这个参数值为 2 的按纽在水平方向改变的程序将是参数值为 1 的那个按纽的两倍。

flag 参数可以更深入的设置构件的属性。我们可以控制构件之间的边框。我们可以在构件之间增加一些空白象素。在要使用边框的地方我们需要定义边界。我

们可以使用 | 符号来连接它们。比如 wx.LEFT | wx.BOTTOM 。flag参数的值可以是:

* wx.LEFT

* wx.RIGHT

* wx.BOTTOM

* wx.TOP

* wx.ALL

如果我们使用 wx.EXPAND 标识,我们的构件将占据所有分配给它的空间。最后,我们还可以定义构件的对齐方式。有以下几种:

* wx.ALIGN_LEFT

* wx.ALIGN_RIGHT

* wx.ALIGN_TOP

* wx.ALIGN_BOTTOM

* wx.ALIGN_CENTER_VERTICAL

* wx.ALIGN_CENTER_HORIZONTAL

* wx.ALIGN_CENTER

看一个例子:

Python代码

1.#!/usr/bin/python

2.# FileName: layout

3.py

3.import wx

4.class MyFrame( wx.Frame ):

5.def __init__( self, parent, ID, title ):

6.wx.Frame.__init__(self,parent,ID,title,(-1,-1),wx.Size(450,300)

)

7.

8.panel = wx.Panel(self,-1)

9.box = wx.BoxSizer( wx.HORIZONTAL )

10.

11.box.Add( wx.Button( panel, -1, 'Button1' ), 1, wx.ALL, 5 )

12.box.Add( wx.Button( panel, -1, 'Button2' ), 0, wx.EXPAND )

13.box.Add( wx.Button( panel, -1, 'Button3' ), 0, wx.ALIGN_CENTER

)

14.

15.panel.SetSizer( box )

16.self.Center()

17.

18.class MyApp( wx.App ):

19.def OnInit( self ):

20.frame = MyFrame( None, -1, 'layout3.py' )

21.frame.Show( True )

22.return True

23.

24.app = My App( 0 )

25.app.MainLoop()

这个例子中,我们仍旧是创建了三个按纽。第一个的周围有一些边界。它是唯一一个可以在水平方向改变大小的,当主窗口的大小改变时。第二个按纽占据了分配给它的所有空间。第三个在竖起方向据中对齐。

我们可以任意组合 wx.BoxSizer 。例如,我们可以将几个水平的 wx.BoxSizer 放在一个竖起的 wx.BoxSizer 中或者相反。这样我们就能产生复杂的布局。

Python代码

1.#!/usr/bin/env python

2.# FileName: borders.py

3.import wx

4.class MyFrame( wx.Frame ):

5.def __init__( self, parent, id, title ):

6.wx.Frame.__init__( self, parent, id, title )

7.

8.vbox = wx.BoxSizer( wx.VERTICAL )

9.hbox1 = wx.BoxSizer( wx.HORIZONTAL )

10.hbox2 = wx.BoxSizer( wx.HORIZONTAL )

11.

12.pnl1 = wx.Panel( self, -1, style=wx.SIMPLE_BORDER )

13.pnl2 = wx.Panel( self, -1, style=wx.RAISED_BORDER )

14.pnl3 = wx.Panel( self, -1, style=wx.SUNKEN_BORDER )

15.pnl4 = wx.Panel( self, -1, style=wx.DOUBLE_BORDER )

16.pnl5 = wx.Panel( self, -1, style=wx.STATIC_BORDER )

17.pnl6 = wx.Panel( self, -1, style=wx.NO_BORDER )

18.

19.hbox1.Add( pnl1, 1, wx.EXPAND | wx.ALL, 3 )

20.hbox1.Add( pnl2, 1, wx.EXPAND | wx.ALL, 3 )

21.hbox1.Add( pnl3, 1, wx.EXPAND | wx.ALL, 3 )

22.

23.hbox2.Add( pnl4, 1, wx.EXPAND | wx.ALL, 3 )

24.hbox2.Add( pnl5, 1, wx.EXPAND | wx.ALL, 3 )

25.hbox2.Add( pnl6, 1, wx.EXPAND | wx.ALL, 3 )

26.

27.vbox.Add( hbox1, 1, wx.EXPAND )

28.vbox.Add( hbox2, 1, wx.EXPAND )

29.

30.self.SetSizer( vbox )

31.self.Centre()

32.

33.class MyApp( wx.App ):

34.def OnInit( self ):

35.frame = MyFrame( None, -1, 'borders.py' )

36.frame.Show( True )

37.return True

38.

39.app = MyApp( 0 )

40.app.MainLoop()

在这个例子中,我们创建了一个两行三列的表格。我们创建了一个竖直的

wx.BoxSizer 和两个水平的 wx.BoxSizer。我们只是简单的把两个水平的放进了那个竖直的中了。我们展示了六种可用的边框样式。边框是简单的窗口装饰品。注意其中两个边框样式只能在 windows 上使用。

边框:

* wx.SIMPLE_BORDER

* wx.RAISED_BORDER

* wx.SUNKEN_BORDER

* wx.DOUBLE_BORDER

* wx.STATIC_BORDER

* wx.NO_BORDER

===================================================================== =

wx.GridSizer 使用两维的表格来布局它里面的东西。每个表格的宽度等于它里面最大那个构件的宽度,高度等于它里面高度最大的那个构件的高度。

wx.GridSizer( integer rows, integer cols, integer vgap, integer hgap )

在构造器中,我们设定行和列的数目以及构件的水平和竖直间距。我们使用AddMany() 方法将我们的构件插入到表中。按照从左到右、从上到下的顺序。

Python代码

1.#!/usr/bin/env python

2.# FileName: calculator.py

3.import wx

4.class MyFrame( wx.Frame ):

5.def __init__( self, parent, id, title ):

6.wx.Frame.__init__(self,parent,id,title,wx.DefaultPosition,wx.Si

ze(300, 250))

7.

8.self.formula = False

9.

10.menubar = wx.MenuBar()

11.file = wx.Menu()

12.file.Append( 22, '&Quit', 'Exit Calculator' )

13.menubar.Append( file, '&File' )

14.self.SetMenuBar( menubar )

15.

16.wx.EVT_MENU( self, 22, self.OnClose )

17.sizer = wx.BoxSizer( wx.VERTICAL )

18.

19.self.display = wx.TextCtrl(self, -1, '', style=wx.TE_RIGHT)

20.sizer.Add(self.display, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 4)

21.gs = wx.GridSizer(4, 4, 3, 3)

22.gs.AddMany([(wx.Button(self, 20, 'Cls'), 0, wx.EXPAND),

23.(wx.Button(self, 21, 'Bck'), 0, wx.EXPAND),

24.(wx.StaticText(self, -1, ''), 0, wx.EXPAND),

25.(wx.Button(self, 22, 'Close'), 0, wx.EXPAND),

26.(wx.Button(self, 1, '7'), 0, wx.EXPAND),

27.(wx.Button(self, 2, '8'), 0, wx.EXPAND),

28.(wx.Button(self, 3, '9'), 0, wx.EXPAND),

29.(wx.Button(self, 4, '/'), 0, wx.EXPAND),

30.(wx.Button(self, 5, '4'), 0, wx.EXPAND),

31.(wx.Button(self, 6, '5'), 0, wx.EXPAND),

32.(wx.Button(self, 7, '6'), 0, wx.EXPAND),

33.(wx.Button(self, 8, '*'), 0, wx.EXPAND),

34.(wx.Button(self, 9, '1'), 0, wx.EXPAND),

35.(wx.Button(self, 10, '2'), 0, wx.EXPAND),

36.(wx.Button(self, 11, '3'), 0, wx.EXPAND),

37.(wx.Button(self, 12, '-'), 0, wx.EXPAND),

38.(wx.Button(self, 13, '0'), 0, wx.EXPAND),

39.(wx.Button(self, 14, '.'), 0, wx.EXPAND),

40.(wx.Button(self, 15, '='), 0, wx.EXPAND),

41.(wx.Button(self, 16, '+'), 0, wx.EXPAND)])

42.sizer.Add(gs, 1, wx.EXPAND)

43.self.SetSizer(sizer)

44.self.Centre()

45.wx.EVT_BUTTON(self, 20, self.OnClear)

46.wx.EVT_BUTTON(self, 21, self.OnBackspace)

47.wx.EVT_BUTTON(self, 22, self.OnClose)

48.wx.EVT_BUTTON(self, 1, self.OnSeven)

49.wx.EVT_BUTTON(self, 2, self.OnEight)

50.wx.EVT_BUTTON(self, 3, self.OnNine)

51.wx.EVT_BUTTON(self, 4, self.OnDivide)

52.wx.EVT_BUTTON(self, 5, self.OnFour)

53.wx.EVT_BUTTON(self, 6, self.OnFive)

54.wx.EVT_BUTTON(self, 7, self.OnSix)

55.wx.EVT_BUTTON(self, 8, self.OnMultiply)

56.wx.EVT_BUTTON(self, 9, self.OnOne)

57.wx.EVT_BUTTON(self, 10, self.OnTwo)

58.wx.EVT_BUTTON(self, 11, self.OnThree)

59.wx.EVT_BUTTON(self, 12, self.OnMinus)

60.wx.EVT_BUTTON(self, 13, self.OnZero)

61.wx.EVT_BUTTON(self, 14, self.OnDot)

62.wx.EVT_BUTTON(self, 15, self.OnEqual)

63.wx.EVT_BUTTON(self, 16, self.OnPlus)

64.

65.def OnClear(self, event):

66.self.display.Clear()

67.def OnBackspace(self, event):

68.formula = self.display.GetValue()

69.self.display.Clear()

70.self.display.SetValue(formula[:-1])

71.def OnClose(self, event):

72.self.Close()

73.def OnDivide(self, event):

74.if self.formula:

75.return

76.self.display.AppendText('/')

77.def OnMultiply(self, event):

78.if self.formula:

79.return

80.self.display.AppendText('*')

81.def OnMinus(self, event):

82.if self.formula:

83.return

84.self.display.AppendText('-')

85.def OnPlus(self, event):

86.if self.formula:

87.return

88.self.display.AppendText('+')

89.def OnDot(self, event):

90.if self.formula:

91.return

92.self.display.AppendText('.')

93.def OnEqual(self, event):

94.if self.formula:

95.return

96.formula = self.display.GetValue()

97.self.formula = True

98.try:

99.self.display.Clear()

100.output = eval(formula)

101.self.display.AppendText(str(output)) 102.except StandardError:

103.self.display.AppendText("Error") 104.def OnZero(self, event):

105.if self.formula:

106.self.display.Clear()

107.self.formula = False

108.self.display.AppendText('0')

109.def OnOne(self, event):

110.if self.formula:

111.self.display.Clear()

112.self.formula = False

113.self.display.AppendText('1')

114.def OnTwo(self, event):

115.if self.formula:

116.self.display.Clear()

117.self.formula = False

118.self.display.AppendText('2')

119.def OnThree(self, event):

120.if self.formula:

121.self.display.Clear()

122.self.formula = False

123.self.display.AppendText('3')

124.def OnFour(self, event):

125.if self.formula:

126.self.display.Clear()

127.self.formula = False

128.self.display.AppendText('4')

129.def OnFive(self, event):

130.if self.formula:

131.self.display.Clear()

132.self.formula = False

133.self.display.AppendText('5')

134.def OnSix(self, event):

135.if self.formula:

136.self.display.Clear()

137.self.formula = False

138.self.display.AppendText('6')

139.def OnSeven(self, event):

140.if self.formula:

141.self.display.Clear()

142.self.formula = False

143.self.display.AppendText('7')

144.def OnEight(self, event):

145.if self.formula:

146.self.display.Clear()

147.self.formula = False

148.self.display.AppendText('8')

149.def OnNine(self, event):

150.if self.formula:

151.self.display.Clear()

152.self.formula = False

153.self.display.AppendText('9')

154.

155.class MyApp(wx.App):

156.def OnInit(self):

157.frame = MyFrame(None, -1, "calculator.py")

158.frame.Show(True)

159.self.SetTopWindow(frame)

160.return True

161.app = MyApp(0)

162.app.MainLoop()

我们输入的公式使用 python 的内置函数 eval 来处理。

output = eval( formula )

如果公式有错,就会显示一条错误信息。请注意我们是如何在 Bck 和 Close 按纽之间插入空白的。我们只是简单的在那放了一个空的 wx.StaticText。这是一个很常用的技巧。

Arduino可穿戴开发入门教程

Ard duin no 可可穿(内ww 穿戴开内部资料大学霸ww.daxue 开发料) 霸 https://www.sodocs.net/doc/ee16406714.html, 发入门门教 教程

前 言 在可穿戴技术高度被关注的今天,可穿戴技术与最热开源硬件Arduino碰撞到一起,迸发闪亮的火花——LilyPad。LilyPad是Arduino官方出品的一款为可穿戴和电子织设计的微控制器板。除了微控制器之外,它还提供了配套的一系列外设,如LED、振动马达、蜂鸣器以及三轴陀螺仪等。 在本教材中,针对LilyPad的特点和定位,以不同于其他Arduino系列控制板的方式对LilyPad是什么,以及它可以做什么进行了详细的介绍。 最后,在教程中还实现了3个切实可用的项目。大家只要将他们缝纫起来就可以使用了。特别是最后的POV手环,那是非常炫酷的。 许多教材是在学习的同时做出项目,而本教材则更偏向在做项目的同时学习。在做完所有这些项目之后,你的眼界将会被开阔,各种奇思妙想会接踵而至。你一定会在有限的LilyPad硬件上做出无限可能的设计。 1.学习所需的系统和软件  的开发可以在三大主流操作系统Windows、OS X和Linux上进行,本教材主要集中?Arduino 在Windows操作系统;  的开发环境是Arduino IDE,它的安装和使用都非常方便,在教材中也有所介绍。 ?Arduino 2.学习建议 大家购买器件之前,建议大家先初略阅读本书内容,以确定项目中可能需要用到的器件。这样可以避免重复多次购买,或者购买到不需要的器件。

目 录 第1章 LilyPad Arduino概览 (1) 1.1 可穿戴技术和电子织物 (1) 1.2 LilyPad各模块简介 (1) 1.2.1 控制器板 (1) 1.2.3 输出模块 (3) 1.2.4 输入模块 (3) 1.2.5 电源模块 (4) 1.2.6 编程器模块 (5) 1.2.7 LilyPad套装 (5) 1.3 缝纫基础 (6) 1.4 LilyPad和LilyPad Simple (10) 1.4.1 LilyPad (10) 1.4.2 LilyPad Simple (11) 1.5 本书写作思想 (12) 第2章开发环境 (13) 2.1 Arduino IDE (13) 2.1.1 安装包下载 (13) 2.1.2 Windows平台下安装Arduino IDE (15) 2.1.3 Linux平台下安装Arduino IDE (18) 2.2 认识IDE (18) 2.2.1 启动Arduino IDE (18) 2.2.2 新建源文件 (20) 2.2.3 编辑源文件 (21) 2.2.4 保存源文件 (23) 2.2.5 打开已经存在的源文件 (24) 2.3 连接LilyPad (25) 2.3.1 Windows平台的驱动 (25) 2.3.2 Linux平台的驱动 (26) 2.4 Blink (27) 2.4.1 打开官方示例 (27) 2.4.2 连接硬件 (28) 2.4.3 选择板子 (28) 2.4.4 选择端口 (29) 2.4.5 上传程序 (31) 2.4.6 观察运行结果 (31) 第3章Arduino语言基础 (33)

SP3D学习笔记(注释)word版本

三维软件学习笔记 一、单管图图框设置操作步骤: a、TOOLS下的OPTIONS中设置好两软件文字对应关系; b、用Smartsketch打开采用AUTOCAD绘制好的图框文件,调好版面上文字样式及大小; c、TOOLS下的OPTIONS中设置好单位;

d、在VIEWS下选择BACKGROUD SHEETS,设置好对应大小的SHEET SETTUP,然后将图框复制过去; e、然后切换至WORKING SHEETS,新建对应大小的SHEET SETTUP

此步Name下必须修改为SHEET1 f、在SHEET下保存文件为.SHA文件。 g、在下面路径中找到 \ProgramFiles(x86)\Smart3D\CatalogData\Bulkload\Datafiles找到bulkloadisokeys.xls文件,打开复制一列,将名称全部对应修改为要添加的图框名称。采用BULKLOAD下。 h、将a-f步骤创建的图框拷在项目共享文件\\win-v6n6pvm43e2\SharedContent\PmfgIsoStyleData下,然后拷一个相应大小的XML文件,(COOKTOP2.5打开)将该XML文件中的图框名字对应修改为新建图框的名字,然后保存。 I、ISOGEN设置时,文字报错,修改文字设置如下。

j、在DRAWING AND REPORTS模式下新建ISO文件夹,然后在ISO文件夹下新建如下图的内容, 选择下面的pipeline k、存储风格包,如下图,选择SAVE Package。

l、选中新建的风格包,右键选SETUP,新建Filter时选择好处图范围,如下图。 m、然后选中风格包,右键新建图纸,如下图,最后UPDATE NOW即可完成ISO图出图。

wxformbuilder界面设计工具入门与进阶

wxPython界面设计入门及进阶 作者:Justin@JinRui Garden 原文整理自:https://www.sodocs.net/doc/ee16406714.html,/blog/archives/434等 1wxPython界面设计利器:wxFormBuilder 之前我曾经介绍过wxPython界面设计的工具BOA(见这里),但是那个主题只有一篇文章,不是因为我太懒,而是BOA在稳定性和工具风格上不太合我的胃口。相对于功能追求全面而强大的BOA,wxFormBuilder则只专注于UI的设计,并生成框架代码,和GTK的工具Glade非常相似。 wxFormBuilder并不是为wxPython而生,它不仅可以生成Python代码,还支持生成C++和XRC代码。的确是使用wxWidget用户的福音! wxFormBuilder对于初始次用的用户来说,确实上手不太容易,因为在它的工程中,无法看到一整个wx.App()。在wxFormBuilder的概念中,UI的承载容器是:Frame、Panel、Dialog、MenuBar和ToolBar等组件。所以在创建好这些UI组件之后,还需要手动创建一个wx.App()使这些组件能够展现给用户。 使用wxFormBuilder进行设计的步骤是: 1、首先增加上述所说的组件; 2、在组件中放入各种Sizer; 3、添加各种控件; 4、添加控件响应动作; 5、自动生成代码;然后就可以根据自己的需要,对代码进行重新组织了。 在这个过程中,wxFormBuilder只负责界面布局、事件绑定和事件接口初始化的部分;剩下的完全由用户来发挥了。 2wxFormBuilder入门 在上一篇博客中,我专门介绍了wxPython的UI设计工具:wxFormBuilder。这篇博客中将对wxFormBuilder进行细致深入的介绍。 此文注定是一篇长长的文章,一共分为如下几个部分:1、wxFormBuilder的安装;2、创建工程前的准备;3、创建第一个工程;4、编写业务逻辑代码。 本文中示例所使用的操作系统是Ubuntu10.04LTS,wxFormBuilder版本为3.2.3-beta。

Arduino 电子积木基础套装中文教程

Arduino 入门版使用教程 V0.2
https://www.sodocs.net/doc/ee16406714.html,
Arduino 入门版使用教程
DFRduino Starter kit User Manual
版本号:V 0.22 最后修订日:2010 09 10
仅供内部评测使用,请勿外传
第 1 页 共 90 页

Arduino 入门版使用教程 V0.2
https://www.sodocs.net/doc/ee16406714.html,
目录
介绍 ......................................................................................................................................................... 3 元件清单 ............................................................................................................................................. 3 Arduino 介绍篇 .................................................................................................................................... 4 概 述 ................................................................................................................................................... 4 Arduino C 语觊介绍............................................................................................................................. 5 结极 ..................................................................................................................................................... 8 功能 ..................................................................................................................................................... 8 Arduino 使用介绍............................................................................................................................... 10 面包板使用介绍 ................................................................................................................................... 29 实验篇 ................................................................................................................................................... 31 第一节 多彩 led 灯实验 ................................................................................................................. 31 第二节 蜂鸣器实验 ......................................................................................................................... 42 第三节 数码管实验 ......................................................................................................................... 47 第四节 按键实验 ............................................................................................................................. 54 第五节 倾斜开关实验 ..................................................................................................................... 64 第六节 光控声音实验 ................................................................................................................... 68 第七节 火焰报警实验 ................................................................................................................... 71 第八节 抢答器实验 ......................................................................................................................... 75 第九节 温度报警实验 ..................................................................................................................... 80 第十节 红外遥控 ............................................................................................................................. 84
仅供内部评测使用,请勿外传
第 2 页 共 90 页

wxPython之wx.font类_光环大数据Python培训

https://www.sodocs.net/doc/ee16406714.html, wxPython之wx.font类_光环大数据Python培训wxPython之wx.font类。 一个wx.Font类实例的对象是确定一个文本的外观。 构造函数 wx.Font(pointSize,family,style,weight,underline,faceName,encoding ) pointSize pointSize是字体的以磅为单位的整数尺寸。 family family用于快速指定一个字体而无需知道该字体的实际的名字.字体的准确选择依赖于系统和具体可用的字体.你所得到的精确的字体将依赖于你的系统。字体类别如下: wx.DECORATIVE:一个正式的,老的英文样式字体。 wx.DEFAULT:系统默认字体。 wx.MODERN:一个单间隔(固定字符间距)字体。 wx.ROMAN:serif字体,通常类似于TimesNewRoman。 wx.SCRIPT:手写体或草写体。

https://www.sodocs.net/doc/ee16406714.html, wx.SWISS:sans-serif字体,通常类似于Helvetica或Arial。 style style参数指明字体的是否倾斜,它的值有: wx.NORMAL, wx.SLANT, wx.ITALIC weight weight参数指明字体的醒目程度,他的值有: wx.NORMAL, wx.LIGHT, wx.BOLD underline underline参数仅工作在Windows系统下,如果取值为True,则加下划线,False为无下划线。 faceName faceName参数指定字体名。 encoding encoding参数允许你在几个编码中选择一个,它映射内部的字符和字本显示字符。编码不是Unicode编码,只是用于wxPython的不同的8位编码。大多数情况你可以使用默认编码。

Arduino初学系列3:Arduino,按键,LED

3 Arduino,按键,LED 3.1 问题描述:如何采用Arduino控制器和按键同时控制LED的闪烁 在前面的2个例子中,都是简单地通过将程序烧录到Arduino控制板,然后由控制板来控制LED灯的闪烁,缺乏人情味。那能不能在Arduino控制的过程中,再加上与人的互动呢?答案是肯定的。在这个实验中,我们将增加一个新的材料按键按钮来和Arduino一起控制灯的闪烁。 3.2 所需材料 表3-1:所需材料 序号名称数量作用备注 1 Arduino软件1套提供IDE环境最新版本1.05 2 Arduino UNO开发板1块控制主板各种版本均可 3 USB线1条烧录程序随板子配送 4 杜邦线若干条连接组件 5 发光二极管(LED)1个 LED闪烁 6 电阻(10,200Ω)2个限流 7 多功能面包板1块连接 8 按键按钮1个开关 在进行实验之前,我们先介绍按键按钮的相关属性。 按键按钮 按键是一种经常使用的设备,通过按键可以输入指令和数据来控制电路的开与关,从而达到控制某些设备的运行状态。在本实验中,通过给按键输入高低电平来控制LED灯的闪烁。开关的种类繁多复杂,比如厨房用的单孔开关,卧房用的双控开关,楼道用的声控开关等等,均属于开关的范畴。在我们实验中,主要是用微型开关,但其种类也很多,如图3-1所示。 图3‐1 微型按键开关种类 在本实验中采用的微型开关大致为6*6*5mm的四脚开关。如图3-2所示。

图3-2 本实验用的按键 值得注意的是,1和2是一边的,3和4是一边的,中间有道痕分开。其原理如图3-3所示,当按键按下去时,1,2,3,4四个管脚接合在一起,2根导线连通,变成一根导线。电路导通,起到触发(关)作用。当松开按钮,1,2,3,4四个管脚断开,起到开的作用。 图3‐3 按键按钮原理图 3.3 实验原理图 当按键按钮按下,获取一个高电平,触发在Arduino控制下的LED闪烁。当然,我们也可以设置为按键按下是LED灯不亮,当松开按键时,LED灯闪烁,请看后面的代码分析。原理图如3-4所示,就是在实验1的基础上增加一个按键按钮。

Arduino手把手系列教程

——什么是Arduino/Arduino是什么 Arduino是一块简单、方便使用的通用GPIO接口板,并可以通过USB接口和电脑通信。 作为一块通用IO接口板,Arduino提供丰富的资源,包括: 13个数字IO口(DIO数字输入输出口); 6个PWM输出(AOUT可做模拟输出口使用); 5个模拟输入口(AIN模拟输入)。 Arduino开发使用java开发的编程环境,使用类c语言编程,并提供丰富的库函数。 Arduino可以和下列软件结合创作丰富多彩的互动作品:Flash,Processing,Max/MSP,VVVV…等。 Arduino也可以用独立的方式运作,开发电子互动作品,例如:开关控制Switch、传感器sensors输入、LED等显示器件、各种马达或其它输出装置。 下面是Arduino的硬件实物图片: Arduino实物图

——Arduino可以做什么 目前计算机的输入和输出设备,大家常见的、也是大家做熟悉的就是:键盘(输入)、鼠标(输入)、麦克(输入)和音响(输出)、显示器(输出);对于一些玩游戏的朋友可能还包括游戏杆(输入),做音乐的可能还会接触到MIDI (输入)。 上述设备都很专业,功能也非常专一。你没办法让键盘给你唱歌,同样,你也没办法让音响替你输入文本。 Arduino更像是一种半成品,它提供通用的输入输出接口。你可以通过编程,把Arduino加工成你需要的输入输出设备。 你可以把Arduino做成键盘、鼠标、麦克等输入设备;你也可以把Arduino做成音响、显示器等输出设备。最重要的是,你可以把Arduino做成任何你希望的互动工具(输入和输出)。 如果你愿意,或者你需要,你完全可做使用Arduino开发出一个会唱歌的键盘或者一个让你的音响替你打字。(夸张的说法) 总之,Arduino是什么,是根据你的需求来确定的。你跟电脑之间的交互,从此插上了翅膀。

SP3D用户操作培训日程(一周)

SP3D 用户操作培训日程 (一周) 基本介绍 (2) Common – 0.5 天 (2) 柱网和结构建模– 1.5 天 (3) 总体介绍 (3) 柱网和坐标 (3) 钢结构 (3) 第二天 (4) 设备建模 - 1 天 (5) 管道建模 - 2 天 (7) 第一天 (7) 第二天 (8)

基本介绍 Common – 0.5 天 用户界面 ?总体介绍 ?Workspace Layout 设计段落管理 ?Session Templates ?Session Files ?Session Settings ?Options 视图操作 ?Common Views ?Zoom Tools ?Window/View Tools 工作区域和过滤器 ?Workspaces ?Filters o System o Assembly o Spatial (Volume or Planes) o Logical Permission Group o Object Types o Properties 对象显示管理 ?View Format ?Surface Styles 附加信息 ?控制点 ?注释 ?超文本链接 测量 ?距离 ?两个对象之间的最短距离 ?角度

对象选取和显示 ?对象选取 ?隐藏和显示 SmartSketch 命令 ?图标 ?选项 ?定位 光标信息提示 ?标号编辑器 碰撞检查 ?查看碰撞点 任务清单 ?任务浏览 柱网和结构建模– 1.5 天 总体介绍 ?柱网 ?坐标系统 ?智能工厂结构 柱网和坐标 ?Grid Wizard ?Placing Coordinate System ?Modifying Grids ?Adding Grid Planes 钢结构 杆件类型 ?梁 ?柱 ?斜撑 杆件属性 ?Name Rule - Naming rule ?Parent System ?Type Category ?Type

python GUI开发工具介绍

python GUI开发工具介绍 Python最大的特点就在于她的快速开发功能。作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域。这里简单介绍用python进行gui开发的一些选择。 https://www.sodocs.net/doc/ee16406714.html,inter Tkinter 似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui 库,也是opensource的产物。Tkinter可用于windows/linux/unix/macintosh操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python 做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还是很有用的,而且开发速度也很快。 2.WxPython WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。 3.PyQT Qt同样是一种开源的GUI库,Qt的类库大约在300多个,函数大约在5700多个。Qt同样适合于大型应用,由它自带的qt designer可以让我们轻松来构建界面元素。 4.pyGtk Gtk是linux下Gnome的核心开发库了。功能上面非常齐全。值得说明的是,在windows 平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。 5.Jython 尝试过用python访问java类库吗,那么就用jython吧。jython其实可以认为是另外一个python开发环境,基于java的,但是大多数的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。 6.MFC

SP3D_安装简明教程2010v3.0

SP3D简明安装手册(Stand-alone配置) Stand-alone,即服务器与客户端安装在同一机器上,有别于Server+Client模式。配置较为简单,要求的网络环境也容易实现,缺点是不能多人协作制作。我们竞赛题目的场区绘制工作量较小,因此使用Stand-alone方式较为方便。 1.安装前准备工作 1)操作系统 Microsoft Windows Standard/Enterprise Server 2003 Service Pack 2 (32-bit) or Microsoft Windows Standard/Enterprise Server 2003 R2 SP2 (32-bit or 64-bit) Microsoft Windows XP Professional Service Pack 3 (32 or 64 bits) Microsoft Windows Vista with Service Pack 1 (32-bit) 以上系统已经经过测试,可以正常安装使用。软件的配置要求较高,请增强配置。 建议重新安装系统后,进入软件安装过程。确保软件安装成功 2)系统其它要求 a)系统建议使用原版未经修改的系统。若使用精简版系统,可能会造成部分组件 不能使用。 b)请事先安装PDF浏览软件,软件的安装需要用到pdf浏览软件。 c)请给管理员帐户设置密码,后续安装时有非常重要的用处! 2.安装过程 首先使用虚拟光驱加载从ftp下载的iso虚拟光驱文件。(如果为光盘文件,请直接将光盘放入光驱即可),配置方式可以参照SP3D Installation Guide.doc文件。此说明文档语言是英文,这里用中文简要概括一下手动安装的步骤: 1)请先安装安装.net 2.0,再安装.net 3.5 sp1(重要!) 安装文件在\Microsoft .net\NetFrameWrk内 若不安装.net,会造成后续安装失败! 2)安装SPLM2010。并根据“SP3D授权获取方式.doc”配置好授权。 3)在控制面板内的程序与功能内添加windows组件。此处包括COM+,与DTC组件。 由于是单机使用,这两个组件可以不做说明上的配置。(windows xp应该默认已安 装此组件,无需配置,可以通过“控制面板→管理工具→组件服务,展开组件服务 →计算机,查看是否已有COM+应用程序和分布式事物处理协调器”) 4)安装SQL Server 2005 Express,其他组件可以不装,但是SQL Server Database Services 与工作站组件必须完整安装! 5)点击SmartPlant 3D安装目录内的Setup.exe,先安装SmartPlant 3D Reference Data Installation,请修改Reference安装位置的名称,其它操作过程可以看“SP3D Installation Guide.doc”。 6)再安装SmartPlant 3D Installation,具体操作过程可以看“SP3D Installation

用python进行GUI开发的选择

用python进行GUI开发的选择 Python最大的特点就在于她的快速开发功能。作为一种胶水型语言,python 几乎可以渗透在我们编程过程中的各个领域。这里我简单介绍一下用python进行gui开发的一些选择。 https://www.sodocs.net/doc/ee16406714.html,inter Tkinter似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui库,也是opensource的产物。Tkinter可用于windows/linux/unix/macintosh 操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还是很有用的,而且开发速度也很快。 2.WxPython WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。 3.PyQT Qt同样是一种开源的GUI库,Qt的类库大约在300多个,函数大约在5700多个。Qt同样适合于大型应用,由它自带的qt designer可以让我们轻松来构建界面元素。 4.pyGtk Gtk是linux下Gnome的核心开发库了。功能上面非常齐全。值得说明的是,在windows平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。 5.Jython 尝试过用python访问java类库吗,那么就用jython吧。jython其实可以认为是另外一个python开发环境,基于java的,但是大多数的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。 6.MFC Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。

基础化学李保山第二版-分子结构习题标准答案

基础化学李保山第二版-分子结构习题答案

————————————————————————————————作者:————————————————————————————————日期: 2

10 分子结构45 10 分子结构习题解答(p322-325) 思考题 1. Na和Cl、F之间,K和Cl、F之间能形成离子化合物。 2. 答案: Be2+ 2电子构型;Ca2+8电子构型;Fe3+9~17电子构型; Cu+ 18电子构型;Sn2+18+2电子构型;Pb4+18电子构型; O2-8电子构型。 3.答案:S2->K+>Na+>Mg2+ 4. Sn4+ >Fe2+ >Sn2+ >Sr2+>Ba2+ 5. S2->O2->F->Cu+ >Na+ 6. (1)半径比规则可以用来判断离子晶体的晶格类型。晶格能可以用来衡量离子键的强弱。 (2)离子极化的结果使原来的离子键向共价键方向过渡。 (3)18电子构型的正离子极化率较强;18电子构型的负离子变形性较强。 7. 答案:原子轨道的角度分布方向是一定的,共价键的形成遵循最大重叠原则,所以只能在建轴方向上才能形成稳定的共价键,因而共价键具有方向性; 每个原子的未成对电子数时一定的,有几个未成对电子就可以形成几个共用电子对,所以共 价键具有饱和性。 8. (1)由两个相同或不相同的原子轨道沿轨道对称轴方向相互重叠而形成的共价键(头碰头),叫做σ键。当两个原子的轨道从垂直于成键原子的核间连线的方向接近,发生电子云重叠而成键(肩并肩),这样形成的共价键称为π键。 (2)单键:在价键理论中,两个原子之间如只有一对共用电子,形成的化学键称为单键。 单电子键:在分子轨道理论中,只有一个电子填入分子轨道形成的化学键称为单电子共价键。 (3)同类型的杂化轨道可分为等性杂化和不等性杂化两种。如果原子轨道杂化后形成的杂化轨道是等同的,这种杂化叫做等性杂化。如果原子轨道杂化后形成的杂化轨道中有一条或几条被孤对电子所占据,使得杂化轨道之间的夹角改变,这种由于孤对电子的存在而造成杂化轨道不完全等同的杂化,叫做不等性杂化。 9. (1)BF3键角大,因为BF3中B的价电子结构为2s22p1,形成分子时,进行sp2杂化,三个sp2杂化轨道分别与三个F原子的p轨道成键,故BF3分子为平面三角形,键角为120度。PF3中,磷原子有一对孤对电子。孤对电子与单键之间的斥力使它们的分子构型为三角锥形。因此BF3键角大。(2)NH3比PH3的键角大是因为P的电负性较N小,PH3中的成键电子云比NH3中的更偏向于H,同时P-H键长比N-H键长大,这样导致PH3中成键电子对之间的斥力减小,孤对电子对成键电子的斥力使H-P-H键角更小。 (3)NH3的键角大,因为在NH3中成键的电子对都靠近电负性较大的氮原子一边,在氮原子处成键电子的相互排斥较强。但是,在NCl3中成键的电子对都被拉向电负性较大的氯原子一边(“远离”中心原子),在氮原子处成键电子的相互排斥较弱. 10. CO2中,先有一个2s电子受到激发而进入空的2p z轨道中,形成2s2p x2p y2p z中各有一个电子的激发态电子构型,然后2s2p x两条轨道杂化形成两条sp杂化轨道。这两条轨道再分别去与氧各成一个σ键(头碰头重叠),如O-C-O结构。此时C原子还有两个未参加成键的p轨道,分别与O的p轨道从侧面重叠各形成一个π键,两个π键分布于C的两侧,且所在平面互相垂直。 45

Arduino教程(非常适合初学者)

Arduino 教程一 数字输出 教程一:
Arduino, 教程 11 Comments ?
Arduino 的数字 I/O 被分成两个部分,其中每个部分都包含有 6 个可用的 I/O 管脚,即管脚 2 到管脚 7 和管脚 8 到管脚 13。除了管脚 13 上接了一个 1K 的电阻之外,其他各个管脚都直接连接到 ATmega 上。我们可以利用一个 6 位的数字跑马灯,来对 Arduino 数字 I/O 的输出功能进行验证,以下是相应的原理图: 电路中在每个 I/O 管脚上加的那个 1K 电阻被称为限流电阻, 由于发光二极管在电路中没有等效电阻值, 使用限流电阻可 以使元件上通过的电流不至于过大,能够起到保护的作用。 该工程对应的代码为:
int BASE = 2; int NUM = 6; int index = 0; void setup() { for (int i = BASE; i < BASE + NUM; i ++) { pinMode(i, OUTPUT); } } void loop() { for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, LOW); } digitalWrite(BASE + index, HIGH); index = (index + 1) % NUM; delay(100); }
下载并运行该工程,连接在 Arduino 数字 I/O 管脚 2 到管脚 7 上的发光二极管会依次点亮 0.1 秒,然后再熄灭:
1

这个实验可以用来验证数字 I/O 输出的正确性。Arduino 上一共有十二个数字 I/O 管脚,我们可以用同样的办法验证其他六个管脚的正 确性,而这只需要对上述工程的第一行做相应的修改就可以了:
int BASE = 8;
SEP
01
Arduino 教程二 数字输入 教程二:
Arduino, 教程 3 Comments ?
在数字电路中开关(switch)是一种基本的输入形式,它的作用是保持电路的连接或者断开。Arduino 从数字 I/O 管脚上只能读出高电 平(5V)或者低电平(0V),因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成 Arduino 能够读取的高/低电平。解 决的办法是通过上/下拉电阻,按照电路的不同通常又可以分为正逻辑(Positive Logic)和负逻辑(Inverted Logic)两种。 在正逻辑电路中,开关一端接电源,另一端则通过一个 10K 的下拉电阻接地,输入信号从开关和电阻间引出。当开关断开的时候, 输入信号被电阻“拉”向地,形成低电平(0V);当开关接通的时候,输入信号直接与电源相连,形成高电平。对于经常用到的按压式 开关来讲,就是按下为高,抬起为低。 在负逻辑电路中,开关一端接地,另一端则通过一个 10K 的上拉电阻接电源,输入信号同样也是从开关 和电阻间引出。当开关断开时,输入信号被电阻“拉” 向电源,形成高电平(5V);当开关接通的时候,输 入信号直接与地相连,形成低电平。对于经常用到的 按压式开关来讲,就是按下为低,抬起为高。 为了验证 Arduino 数字 I/O 的输入功能,我们可以将 开关接在 Arduino 的任意一个数字 I/O 管脚上(13 除 外),并通过读取它的接通或者断开状态,来控制其 它数字 I/O 管脚的高低。本实验采用的原理图如下所 示,其中开关接在数字 I/O 的 7 号管脚上,被控的发 光二极管接在数字 I/O 的 13 号管脚上:
Arduino 教程三 模拟输入 教程三:
Arduino, 教程 5 Comments ?
2

Arduino入门教程(13)—彩灯调光台

Arduino 入门教程(13)—彩灯调光台 我们已经接触过 RGB LED 了,可以实现变色,这回儿我们需要加入互动元素进去。通过三个电位器来任意变换对应的R、G、B,组合成任何你想要的颜色,在家做个心情灯吧,随心情任意切换。 所需材料 1×5mm RGB LED 灯 3×220 欧电阻 3×10K 电位器 STEP 1:硬件连接 STEP 2:输入代码 1. int redPin = 9;// R – digital 9 2. int greenPin = 10;// G – digital 10 3. int bluePin = 11;// B – digital 11 4. // 电位器1 – analog 0 int potRedPin = 0;

5. int potGreenPin = 1; // 电位器2 – analog 1 6. int potBluePin = 2; // 电位器3 – analog 2 7. 8. void setup(){ 9. pinMode(redPin,OUTPUT); 10. pinMode(greenPin,OUTPUT); 11. pinMode(bluePin,OUTPUT); 12. Serial.begin(9600); // 初始化串口 13. } 14. 15. void loop(){ 16. int potRed = analogRead(potRedPin); // potRed存储模拟口 0读到的值 17. int potGreen = analogRead(potGreenPin); // potGreen存储模拟 口1读到的值 18. int potBlue = analogRead(potBluePin); // potBlue存储模拟口 2读到的值 19. 20. int val1 = map(potRed,0,1023,0,255); //通过map函数转换 为0~255的值 21. int val2 = map(potGreen,0,1023,0,255); 22. int val3 = map(potBlue,0,1023,0,255); 23. 24. //串口依次输出Red,Green,Blue对应值 25. Serial.print("Red:"); 26. Serial.print(val1); 27. Serial.print("Green:"); 28. Serial.print(val2); 29. Serial.print("Blue:"); 30. Serial.println(val3); 31. 32. colorRGB(val1,val2,val3); // 让RGB LED 呈现对应颜色 33. } 34. 35. //该函数用于显示颜色 36. void colorRGB(int red, int green, int blue){

wxpython中文手册

wxpython中文手册 wxPython中文教程简单入门加实例 Python 2 / Wxpython wxPythonPython 编程浏览器脚本 wx.Window 是一个基类,许多构件从它继承。包括wx.Frame 构件。技术上这意味着,我们可以在所有的子类中使用wx.Window 的方法。我们这里介绍它的几种方法: * SetTitle( string title ) ——设置窗口标题。只可用于框架和对话框。 * SetToolTip( wx.ToolTip tip ) ——为窗口添加提示。 * SetSize( wx.Size size ) ——设置窗口的尺寸。 * SetPosition( wx.Point pos ) ——设置窗口出现的位置。 * Show( show = True ) ——显示或隐藏窗口。其中的参数可以为True 或False。 * Move( wx.Point pos ) ——将窗口移动到指定位置。 * SetCursor( wx.StockCursor id ) ——设置窗口的鼠标指针样式。Python 代码 1. import wx 2. app = wx.PySimpleApp() 3. frame = wx.Frame( None, -1, '' ) 4. frame.SetToolTip( wx.ToolTip( 'This is a frame' ) )

5. frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) ) 6. frame.SetPosition( wx.Point( 0, 0 ) ) 7. frame.SetSize( wx.Size( 300, 250 ) ) 8. frame.SetTitle( 'simple2.py' ) 9. frame.Show() 10.app.MainLoop() wx.CURSOR_ARROW wx.CURSOR_RIGHT_ARROW wx.CURSOR_BLANK wx.CURSOR_BULLSEYE wx.CURSOR_CHAR wx.CURSOR_CROSS wx.CURSOR_HAND wx.CURSOR_IBEAM wx.CURSOR_LEFT_BUTTON wx.CURSOR_MAGNIFIER wx.CURSOR_MIDDLE_BUTTON wx.CURSOR_NO_ENTRY wx.CURSOR_PAINT_BRUSH wx.CURSOR_PENCIL wx.CURSOR_POINT_LEFT wx.CURSOR_POINT_RIGHT

相关主题