wxpython中文教程 您所在的位置:网站首页 wxpython编程 wxpython中文教程

wxpython中文教程

#wxpython中文教程| 来源: 网络整理| 查看: 265

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 )

—— 设置窗口的鼠标指针样式。import wxapp =

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

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

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

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

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

frame.SetTitle( 'simple2.py' )

frame.Show()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))上里的例子,我们将应用其它有效的特性:import

wxdef main():

app=wx.PySimpleApp()frame=wx.Frame(None,-1,'Icon',wx.DefaultPosition,wx.Size(350,300))

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

frame.Center()

frame.Show()

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

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 )我们把上述那些构成个小脚本:#!/usr/bin/env python

# FileName: menu1.pyimport wxclass MyMenu( wx.Frame ):

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

wx.Frame.__init__(self,parent,-1,title,wx.DefaultPosition,wx.Size(200,

150))

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()

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)

menubar.Append(file,'&File')

menubar.Append(edit,'&Edit')

menubar.Append(help,'&Help')

self.SetMenuBar( menubar )

class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

return True

app=MyApp(0)

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()那样窗口便会出此刻屏幕的傍边。#!/usr/bin/python

# FileName: menu2.pyimport wx

class MyMenu(wx.Frame):

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

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

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

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()quit = wx.MenuItem(file, 105,

'&Quit\tCtrl+Q', 'Quit the Application')

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

wx.BITMAP_TYPE_PNG).ConvertToBitmap())

file.AppendItem(quit)edit.Append(201, 'check item1', '',

wx.ITEM_CHECK)

edit.Append(202, 'check item2', kind= wx.ITEM_CHECK)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)menubar.Append(file,

'&File')

menubar.Append(edit, '&Edit')

menubar.Append(help, '&Help')self.SetMenuBar(menubar)

self.Centre()

wx.EVT_MENU(self, 105, self.OnQuit)def OnQuit(self, event):

self.Close()class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

return Trueapp = MyApp(0)

app.MainLoop()

建坐一个菜单栏在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 )我们把上述那些构成个小脚本:#!/usr/bin/env python

# FileName: menu1.pyimport wxclass MyMenu( wx.Frame ):

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

wx.Frame.__init__(self,parent,-1,title,wx.DefaultPosition,wx.Size(200,

150))

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()

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)

menubar.Append(file,'&File')

menubar.Append(edit,'&Edit')

menubar.Append(help,'&Help')

self.SetMenuBar( menubar )

class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

return True

app=MyApp(0)

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()那样窗口便会出此刻屏幕的傍边。#!/usr/bin/python

# FileName: menu2.pyimport wx

class MyMenu(wx.Frame):

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

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

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

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()quit = wx.MenuItem(file, 105,

'&Quit\tCtrl+Q', 'Quit the Application')

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

wx.BITMAP_TYPE_PNG).ConvertToBitmap())

file.AppendItem(quit)edit.Append(201, 'check item1', '',

wx.ITEM_CHECK)

edit.Append(202, 'check item2', kind= wx.ITEM_CHECK)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)menubar.Append(file,

'&File')

menubar.Append(edit, '&Edit')

menubar.Append(help, '&Help')self.SetMenuBar(menubar)

self.Centre()

wx.EVT_MENU(self, 105, self.OnQuit)def OnQuit(self, event):

self.Close()class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

return Trueapp = MyApp(0)

app.MainLoop()

我们来写一个挨次,它的窗口顶部的一行被三个按纽占据。那些按纽会随窗口的篡改而篡改。#!/usr/bin/env

python

# FileName: wxboxsizer.pyimport wxclass MyFrame(wx.Frame):

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

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

panel=wx.Panel(self,-1)

box=wx.BoxSizer(wx.HORIZONTAL)

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

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

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

panel.SetSizer(box)

self.Centre()

class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

return True

app = MyApp(0)

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看一个例子:#!/usr/bin/python

# FileName: layout3.pyimport wxclass MyFrame( wx.Frame ):

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

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

panel = wx.Panel(self,-1)

box = wx.BoxSizer( wx.HORIZONTAL )

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

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

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

)

panel.SetSizer( box )

self.Center()

class MyApp( wx.App ):

def OnInit( self ):

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

frame.Show( True )

return True

app = My App( 0 )

app.MainLoop()阿谁例子中,我们仍然是建坐了三个按纽。第一个的四周有一些鸿沟。它是唯逐个个可以在水平偏向篡改大年夜小的,当主窗口的大年夜小篡改时。第两个按纽占据了分派给它的一切空间。第三个在竖起偏向据中对齐。我们可以随意率性组开

wx.BoxSizer 。例如,我们可以将几个水平的 wx.BoxSizer 放在一个竖起的 wx.BoxSizer

中或相反。那样我们便能产生复纯的筹算。#!/usr/bin/env python

# FileName: borders.pyimport wxclass MyFrame( wx.Frame ):

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

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

vbox = wx.BoxSizer( wx.VERTICAL )

hbox1 = wx.BoxSizer( wx.HORIZONTAL )

hbox2 = wx.BoxSizer( wx.HORIZONTAL )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

self.SetSizer( vbox )

self.Centre()

class MyApp( wx.App ):

def OnInit( self ):

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

frame.Show( True )

return True

app = MyApp( 0 )

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()

行动将我们的构件插进到表中。按照从左到左、从上到下的次第。#!/usr/bin/env python# FileName:

calculator.pyimport wxclass MyFrame( wx.Frame ):

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

wx.Frame.__init__(self,parent,id,title,wx.DefaultPosition,wx.Size(300,

250))

self.formula = False

menubar = wx.MenuBar()

file = wx.Menu()

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

menubar.Append( file, '&File' )

self.SetMenuBar( menubar )

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

sizer = wx.BoxSizer( wx.VERTICAL )

self.display = wx.TextCtrl(self, -1, '',

style=wx.TE_RIGHT)

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

gs = wx.GridSizer(4, 4, 3, 3)gs.AddMany([(wx.Button(self, 20,

'Cls'), 0, wx.EXPAND),

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(wx.Button(self, 16, '+'), 0, wx.EXPAND)])sizer.Add(gs, 1,

wx.EXPAND)

self.SetSizer(sizer)

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

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

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

self.OnSeven)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

def OnClear(self, event):

self.display.Clear()def OnBackspace(self, event):

formula = self.display.GetValue()

self.display.Clear()

self.display.SetValue(formula[:-1])def OnClose(self, event):

self.Close()def OnDivide(self, event):

if self.formula:

return

self.display.AppendText('/')def OnMultiply(self, event):

if self.formula:

return

self.display.AppendText('*')def OnMinus(self, event):

if self.formula:

return

self.display.AppendText('-')def OnPlus(self, event):

if self.formula:

return

self.display.AppendText('+')def OnDot(self, event):

if self.formula:

return

self.display.AppendText('.')def OnEqual(self, event):

if self.formula:

return

formula = self.display.GetValue()

self.formula = True

try:

self.display.Clear()

output = eval_r(formula)

self.display.AppendText(str(output))

except StandardError:

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

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('0')def OnOne(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('1')def OnTwo(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('2')def OnThree(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('3')def OnFour(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('4')def OnFive(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('5')def OnSix(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('6')def OnSeven(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('7')def OnEight(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('8')def OnNine(self, event):

if self.formula:

self.display.Clear()

self.formula = False

self.display.AppendText('9')

class MyApp(wx.App):

def OnInit(self):

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

frame.Show(True)

self.SetTopWindow(frame)

return Trueapp = MyApp(0)

app.MainLoop()我们输进的公式应用 python 的内置函数 eval 来措置。output = eval_r(

formula )若是公式有错,便会发挥分解一条错误信息。请寄看我们是如安在 Bck 和 Close

按纽之间插进空缺的。我们只是简单的在那放了一个空的 wx.StaticText。那是一个很经常使用的手艺。

天津汇港



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有