测试工具研发_脚本(4):制作简单GUI窗口


1、实现一个简单的GUI窗口

"""
(1)一个GUI小窗口
"""
import wx


# (1)定义一个应用程序类对象
app = wx.App()
# (2)创建一个顶级窗口
window = wx.Frame(None, title="一个GUI小窗口", size=(300, 500))
# (3)定义一个panel对象,相当于一个容器,用来管理元素
panel = wx.Panel(window)
# (4)添加一个静态文本
wx.StaticText(panel, label="骚年,你准备好了吗?", pos=(100, 200))
# (5)激活框架窗口
window.Show(True)
# (6)运行APP
app.MainLoop()

在这里插入图片描述

2、实现2个数运算的GUI窗口

"""
(2) 实现2个数的运算

"""
import wx


# a、定义按钮触发事件函数
def calculator(event):
    # 获取控件num1的数据
    number1 = num1.GetValue()
    # 获取控件operator的数据
    oper = operator.GetValue()
    # 获取控件num2的数据
    number2 = num2.GetValue()
    # 数据处理
    if oper == "+":
        r = int(number1) + int(number2)
    if oper == "-":
        r = int(number1) - int(number2)
    if oper == "*":
        r = int(number1) * int(number2)
    if oper == "/":
        r = float(number1) / int(number2)
    # 将处理结果放入控件result中
    result.SetValue(number1+oper+number2+"="+str(r))

# (1)控件定义
app = wx.App()  # 定义一个应用程序
window = wx.Frame(None, title="简易计算", size=(500, 400))  # 定义一个窗体
panel = wx.Panel(window)  # 定义一个容器
num1 = wx.TextCtrl(panel)  # 定义文本框1
operator = wx.TextCtrl(panel)  # 定义文本框2
num2 = wx.TextCtrl(panel)  # 定义文本框3
result = wx.TextCtrl(panel)  # 定义文本框3
button = wx.Button(panel, label="ok")  # 定义按钮

# (2)控件布局
# a、定义BoxSizer1,依次加入控件到boxsizer中
boxsizer1 = wx.BoxSizer(wx.HORIZONTAL)
boxsizer1.Add(num1, proportion=1, border=8, flag=wx.LEFT)  # 左侧留出8个像素的大小空间
boxsizer1.Add(operator, proportion=3, border=8, flag=wx.LEFT | wx.RIGHT)  # 左右2侧都流出空格
boxsizer1.Add(num2, proportion=2, border=8, flag=wx.LEFT)
# b、定义boxsizer2,将boxsizer1嵌套到2里面
boxsizer2 = wx.BoxSizer(wx.VERTICAL)
boxsizer2.Add(boxsizer1, flag=wx.EXPAND | wx.TOP, border=8)
boxsizer2.Add(button, flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=8)
boxsizer2.Add(result, proportion=1, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP | wx.BOTTOM, border=8)
# c、执行布局设置2
panel.SetSizer(boxsizer2)

# (3)按钮绑定事件
# b、绑定按钮
button.Bind(wx.EVT_BUTTON, calculator)

# (4)运行GUI工具
window.Show(True)  # 激活显示窗口
app.MainLoop()  # 运行程序

在这里插入图片描述

3、面向对象结构优化

# 使用面向对象思想进行GUI运算器得实现

import wx


# 定义类
class cal_GUI:

    # 类的初始化方法,创建app及控件
    def __init__(self):
        # 创建一个app
        self.app = wx.App()
        self.window = wx.Frame(None, title="计算器_tfjiao", size=(500, 300))
        self.panel = wx.Panel(self.window)
        # 创建控件
        self.txtNum1 = wx.TextCtrl(self.panel)
        self.txtoperator = wx.TextCtrl(self.panel)
        self.txtNum2 = wx.TextCtrl(self.panel)
        self.txtResult = wx.TextCtrl(self.panel)
        self.butOK = wx.Button(self.panel, label="OK")

    # 布局并生效控件
    def layout(self):
        # (1)布局一个水平box,有3个控件
        box1 = wx.BoxSizer(wx.HORIZONTAL)
        box1.Add(self.txtNum1, proportion=10, flag=wx.LEFT, border=8)
        box1.Add(self.txtoperator, proportion=1, flag=wx.LEFT, border=8)
        box1.Add(self.txtNum2, proportion=10, flag=wx.LEFT | wx.RIGHT, border=8)
        # (2)布局一个竖直box,有3个控件
        box2 = wx.BoxSizer(wx.VERTICAL)
        box2.Add(box1, flag=wx.EXPAND | wx.BOTTOM | wx.TOP, border=8)
        box2.Add(self.butOK, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=8)
        box2.Add(self.txtResult, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=8, proportion=1)
        # (3)生效box
        self.panel.SetSizer(box2)

    # 数据处理1、2、3
    def cal_event(self, event):
        # a、获取界面输入的值
        num1 = self.txtNum1.GetValue()
        oper = self.txtoperator.GetValue()
        num2 = self.txtNum2.GetValue()
        # b、根据运算符进行处理
        if oper == "+":
            r = int(num1) + int(num2)
        if oper == "-":
            r = int(num1) - int(num2)
        if oper == "*":
            r = int(num1) * int(num2)
        if oper == "/":
            r = float(num1) / int(num2)
        # c、将处理结果放入控件txtResult中
        self.txtResult.SetValue(num1 + oper + num2 + "=" + str(r))

    # 将数据处理的方法,绑定在指定按钮上
    def bind_set(self):
        self.butOK.Bind(wx.EVT_BUTTON, self.cal_event)  # 类里面调用函数,不用带括号

    # 运行app
    def run(self):
        self.window.Show(True)
        self.app.MainLoop()


if __name__ == '__main__':
    a = cal_GUI()
    a.layout()
    a.bind_set()
    a.run()

4、问题

问题1:报错UnboundLocalError: local variable ‘r’ referenced before assignment

在定义布局时候,这两行代码得顺序搞反了
operator = wx.TextCtrl(panel) # 定义文本框2
num2 = wx.TextCtrl(panel) # 定义文本框3

猜你喜欢

转载自blog.csdn.net/weixin_45451320/article/details/120338698