一、需求
基于GUI的设计:实现两个数的运算
二、步骤分析:
1、画出控件:窗体、容器,文本框、按钮、静态标签
2、控件的布局:
在容器里,创建BoxSizer对象,有水平(HORIZONTAL)和垂直(VERTICAL)两种。将需要布局的控件,通过add方法,放入BoxSizer中,再给每个控件设置布局属性,执行布局panel1.SetSizer(boxsizer1)
BoxSizer对象的控件布局属性
属性 | 含义 |
---|---|
控件名 | 文本框、按钮、静态标签等的对象 |
proportion | 布局对象里控件的比例:proportion不写默认0,写了就按照比例分配 |
border | 控件间隔像素 |
flag | 对齐方式flag,分为左右上下和平铺满,间隔方向的间距大小由border决定 |
3、接受界面的数据,并进行处理:+、-、*、/
number1 = text_num1.GetValue()
4、按钮的单击事件,处理与关联:单击按钮后,调用运算处理
'''
定义按钮事件函数,将控件和函数进行绑定
函数参数必须是event,代表这是个按钮事件函数
一般来说,一个功能/按钮,绑定一个函数
'''
#定义按钮事件函数
def show_value_event(event):
#获取文本框的输入内容
number1 = text_num1.GetValue()
text_result.SetValue(number1)
#将控件和函数进行绑定
button1.Bind(wx.EVT_BUTTON,show_value_event)
5、激活窗口并运行程序
#激活这个框架窗口
window.Show(True)
#运行APP
app.MainLoop()
三、代码:
#GUI计算器实例
import wx
class Calculator_GUI():
#初始化各个对象
def __init__(self):
#创建APP对象
self.app = wx.App()
#创建第一个父窗体
self.window = wx.Frame(None,title = '计算器小工具',size =(500,400))
#容器
self.panel1 = wx.Panel(self.window)
#控件
self.text_num1 = wx.TextCtrl(self.panel1) #运算数1
self.text_operator = wx.TextCtrl(self.panel1) #运算符
self.text_num2 = wx.TextCtrl(self.panel1) #运算数2
self.button1 = wx.Button(self.panel1,label='计算') #计算按钮
self.text_result = wx.TextCtrl(self.panel1) #运算结果
#控件布局函数
def BoxSizer_Layout(self):
#在window窗体里添加一个容器panel,并创建文本框、按钮、静态文本标签进行布局
boxsizer1 = wx.BoxSizer(wx.HORIZONTAL)
boxsizer2 = wx.BoxSizer(wx.VERTICAL)
boxsizer3 = wx.BoxSizer(wx.VERTICAL)
# boxsizer3
boxsizer3.Add(boxsizer1,flag=wx.EXPAND|wx.TOP|wx.BOTTOM,border=10)
boxsizer3.Add(boxsizer2,flag=wx.EXPAND,border=10)
#boxsizer1
boxsizer1.Add(self.text_num1,proportion=1,border=10,flag=wx.LEFT)
boxsizer1.Add(self.text_operator,proportion = 0,border=10,flag=wx.LEFT)
boxsizer1.Add(self.text_num2,proportion = 1,border=10,flag=wx.LEFT|wx.RIGHT)
#boxsizer2
boxsizer2.Add(self.button1,proportion = 1,flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT,border=10)
boxsizer2.Add(self.text_result,proportion = 6,flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT,border=10)
#执行布局设置
self.panel1.SetSizer(boxsizer3)
#定义按钮事件函数
def calculator_event(self,event):
#获取文本框的输入内容
number1 = self.text_num1.GetValue()
operator = self.text_operator.GetValue()
number2 = self.text_num2.GetValue()
if operator=='+':
res = int(number1)+int(number2)
if operator=='-':
res = int(number1)-int(number2)
if operator=='*':
res = int(number1)*int(number2)
if operator=='/':
res = int(number1)/int(number2)
self.text_result.SetValue(number1+operator+number2+"="+str(res))
# 将控件和函数进行绑定
def Bing_event(self):
self.button1.Bind(wx.EVT_BUTTON,self.calculator_event)
def run(self):
#激活这个框架窗口
self.window.Show(True)
#运行APP
self.app.MainLoop()
if __name__ == '__main__':
obj = Calculator_GUI()
obj.BoxSizer_Layout()
obj.Bing_event()
obj.run()