GUI实战:(二)类设计实现V1:GUI 实现类及事件类

一、实现功能

版本V1:先简单实现窗体的展示,此时标签位置是挤在一起的
版本V2:将标签进行布局,通过定义一个新的方法
版本V3:按钮触发绑定事件
①点击【打开】按钮(打开按钮绑定的是选择文件)。选择文件所在目录,选择csv文件,并将csv文件名展示在文本框中。
②点击【执行】按钮(执行按钮绑定的是读取csv文件)。从文本框获取csv文件地址信息,开始读取csv文件信息,先将csv数据打印出来
版本4:实现重置按钮、退出按钮及校验文本框不为空

二、属性设计和方法设计

界面原型
在这里插入图片描述

(1)属性设计:将界面各个元素设为属性

属性设计设计
APP通过wx里的APP(),定义APP
window窗体
panel容器
label_file静态的标签
txt_file文本框
but_open打开按钮
but_run执行按钮
but_clear清空按钮
but_exit退出按钮

(2)方法设计:

动作方法
控件布局方法UI_Layout
窗体启动方法UI_Show
按钮触发绑定事件的方法UI_Event
打开文件按钮的绑定事件OpenFile
执行文件按钮的绑定事件ReadFile
重置按钮的绑定事件Clear_file
退出按钮的绑定事件Exit_window
三、最终整合
#此模块设计的是用户图形界面
import csv
import os
import wx

#GUI用户界面启动类
class UI_Frame():
    #初始化方法,定义窗体控件及容器
    def __init__(self):
        #通过wx里的APP(),定义APP
        self.APP = wx.App()
        #用frame定义窗体,NONE为顶级窗体
        self.window =wx.Frame(None,title = "工具", size=(800,300))
        #定义panel容器,窗体上一定得要加载panel容器才能添加控件,
        #里面的参数是panel属于的窗体
        self.panel = wx.Panel(self.window)

        #定义窗体上的控件
        #一般遵循从左到右,从上到下的原则

        #第一个控件:静态的标签,标签文字是通过静态文本框来定义的
        #要指定这个label标签属于哪个panel。这个静态标签的有名字,所以label标签为测试框架配置文件
        self.label_file = wx.StaticText(self.panel,label = '测试框架配置文件')

        #第二个控件:定义文件显示的文本框,并指定这个文本框的所在容器
        #设置文本框为只读style = wx.TE_READONLY
        self.txt_file = wx.TextCtrl(self.panel,style = wx.TE_READONLY)

        #第三个控件:打开按钮
        # 并指定打开按钮的所在容器。这个按钮有名字,所以需要加一个label标签,写上按钮的名字
        self.but_open = wx.Button(self.panel,label = '打开')

        #第四个控件:执行按钮
        #并指定打开按钮的所在容器。这个按钮的名字是执行,所以需要加一个label标签,写上按钮的名字
        self.but_run = wx.Button(self.panel,label = '执行')

        #第五个控件:重置按钮
        self.but_clear = wx.Button(self.panel,label = '重置')

        #第六个控件,退出按钮
        self.but_exit = wx.Button(self.panel,label = '退出')

        #定义配置文件名称
        self.configfile = ""

    #实现控件布局方法
    def UI_layout(self):
        #定义水平放置的boxsizer1,水平放置的不需要写参数
        boxsiaer1 = wx.BoxSizer()
        #将指定的控件加入这个boxsizer1
        #flag=wx.ALL,ALL为上下左右四个方向设置距离
        #border = 10,距离设为10px
        boxsiaer1.Add(self.label_file,flag=wx.ALL,border = 30)
        boxsiaer1.Add(self.txt_file,proportion = 2,flag=wx.ALL,border = 30)


        #定义水平放置的boxsizer2,水平放置的不需要写参数
        boxsiaer2 = wx.BoxSizer()
        #将指定的控件加入这个boxsizer1
        boxsiaer2.Add(self.but_open, flag=wx.ALL, border=30)
        boxsiaer2.Add(self.but_run,flag=wx.ALL,border = 30)
        boxsiaer2.Add(self.but_clear,flag=wx.ALL,border = 30)
        boxsiaer2.Add(self.but_exit,flag=wx.ALL,border = 30)

        #定义boxsizer3,垂直放置boxsiaer1,boxsiaer2
        boxsiaer3 = wx.BoxSizer(wx.VERTICAL)
        #wx.TOP,只设置boxsiaer1上方的距离为10个像素
        boxsiaer3.Add(boxsiaer1,flag=wx.TOP|wx.EXPAND,border = 20)
        boxsiaer3.Add(boxsiaer2)

        #设置让定义好的boxsizer生效
        # self.panel.SetSizer(boxsiaer1)
        # self.panel.SetSizer(boxsiaer2)
        self.panel.SetSizer(boxsiaer3)

    #按钮触发绑定事件
    def UI_Event(self):
        #打开按钮:选择csv文件
        self.but_open.Bind(wx.EVT_BUTTON,self.OpenFile)
        #执行按钮:开始读取csv文件
        self.but_run.Bind(wx.EVT_BUTTON,self.Rundriver)
        #重置按钮
        self.but_clear.Bind(wx.EVT_BUTTON, self.Clear_file)
        #退出按钮
        self.but_exit.Bind(wx.EVT_BUTTON, self.Exit_window)

    #退出,关闭窗口
    def Exit_window(self,event):
        self.window.Close()

    def Clear_file(self,event):
        self.txt_file.SetValue("")

    #打开配置csv文件
    #注意event参数,点击这个按钮需要触发的事件
    def OpenFile(self,event):
        #设置打开文件对话框
        self.FileDialog_open = wx.FileDialog(self.panel,
                                             message='打开文件',
                                             wildcard='*.csv',
                                             style=wx.FD_OPEN)
        if self.FileDialog_open.ShowModal() == wx.ID_OK:
            self.txt_file.AppendText(self.FileDialog_open.GetPath())
            #从文本框里获取这个csv文件,并保存在这个属性中
            self.configfile = self.FileDialog_open.GetPath()

    #读取选择的csv文件信息
    def Rundriver(self, event):
        #执行时,校验本文矿非空
        txt_file = self.txt_file.GetValue()
        if txt_file=="":
            dialog = wx.MessageDialog(None,"请选择csv文件","错误提示",wx.YES_DEFAULT|wx.ICON_QUESTION)
            if dialog.ShowModal()==wx.ID_YES:
                dialog.Destroy()
            return 0
        #调用驱动类UI_Driver中读文件的方法
        readfile_obj = UI_Driver()
        readfile_obj.ReadFile(self.configfile)

    #显示窗体
    def UI_show(self):
        #window窗体调用show方法,参数为true
        self.window.Show(True)
        #执行这个APP
        self.APP.MainLoop()

#定义驱动程序类
class UI_Driver():
    #定义读取文件方法
    def ReadFile(self,configFile):
        file = open(configFile,'r')
        table = csv.reader(file)
        next(table)
        for row in table:
            filepath = row[1]
        #将读取的数据,执行测试脚本
            # 定义命令行的字符串,是一个字符列表,相当于cmd命令里执行这程序
            strOS = str('python '+filepath)
            os.system(strOS)

if __name__ == '__main__':
    OBJ = UI_Frame()
    #运行这个窗体界面
    OBJ.UI_layout()
    #布局完成之后调用按钮事件,OpenFile会自动由UI_Event调用
    OBJ.UI_Event()
    OBJ.UI_show()








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值