python之wxpython模块学习

python之wxpython模块学习

wxPython简介

wxPython 是一个用于 wxWidgets (用C ++编写)的Python包装器,这是一个流行的跨平台GUI工具包。由Robin Dunn和Harri Pasanen共同开发,wxPython被实现为一个Python扩展模块。

就像wxWidgets一样,wxPython也是一个免费软件。它可以从官方网站http://wxpython.org下载。许多操作系统平台的二进制文件和源代码可在本网站上下载。

wxPython API中的主要模块包括一个核心模块。它由 wxObject 类组成,它是API中所有类的基础。控制模块包含GUI应用程序开发中使用的所有小部件。例如,wx.Button,wx.StaticText(类似于标签),wx.TextCtrl(可编辑文本控件)等。

wxPython API具有GDI(图形设备接口)模块。它是一组用于绘制小部件的类。像字体,颜色,画笔等类是其中的一部分。所有容器窗口类都在Windows模块中定义。

wxPython的官方网站也承载了Phoenix项目 - 一个用于Python3的wxPython的新实现。它侧重于提高速度,可维护性和可扩展性。该项目始于2012年,目前仍处于测试阶段。

创建一个GUI程序

1.需求描述
在这里插入图片描述
1、文件内容显示文本框:只读属性(不能输入文件及路径内容)
2、点击执行按钮:校验检查配置文件文本框中是否存在内容,如果没有选择文件内容时,要进行提示。如果有文件内容可以进行执行。
3、重置按钮:将文件文本框中的内容清空
4、退出按钮:关闭窗体
5、表格形式测试报告:单选按钮(如果脚本是非 unittest 框架编写模式)
6、Html 形式测试报告:单选按钮(只支持 unittest 框架编写的脚本)
7、只有选中了表格形式测试报告,才会出现 bug 报告的选择项,如果没有选中表格形式测试报告,不出现 bug 报告的选择项。
8、默认不选择 bug 报告
9、只有当选择“生成 bug 报告”,才会出现是否“发送 bug 报告”的复选框
10、选中发送 bug 后,在点击执行按钮后,把 bug 报告发送给开发人员(方式 1:把同一份 bug 报告,发送给所有的开发;方式 2:对应的 bug 信息只发送给对应的开发)

class UITestFrame:
    # 定义初始化方法,设置界面属性
    def __init__(self):
        # 定义Application类的一个对象
        self.app = wx.App()
        # 创建一个顶级窗口作为wx.Frame类的对象。标题和大小参数在构造函数中给出。
        self.window = wx.Frame(None, title='测试框架V1.0', size=(500, 300))
        # 将一个Panel对象放入框架中, 用来管理空间布局
        self.panel = wx.Panel(self.window)
        # 添加一个StaticText对象以在窗口内的所需位置显示'测试框架配置文件',pos指定显示的位置
        self.lbl_file = wx.StaticText(self.panel, label='测试框架配置文件', pos=(10,10))
        # 添加一个文本框,wx.TE_READONLY设置该文本框为只读属性
        style=wx.TE_MULTILINE为多行显示
        self.text_file = wx.TextCtrl(self.panel, size=(200, 25), style=wx.TE_READONLY)
        # 添加一个按钮
        self.but_open = wx.Button(self.panel, label='打开')
        self.but_run = wx.Button(self.panel, label='执行')
        self.but_reset = wx.Button(self.panel, label='重置')
        self.but_quit = wx.Button(self.panel, label='退出')
        # 定义配置文件属性
        self.file_path = ''
        # 定义测试报告生成的方式
        self.csv_report = wx.RadioButton(self.panel, 1, '表格形式测试报告')
        # 默认生成csv报告
        self.csv_report.SetValue(1)
        self.html_report = wx.RadioButton(self.panel, 2, 'html形式测试报告(只支持unit test框架)')
        # 定义生成bug报告复选框
        self.bug_report = wx.CheckBox(self.panel, label='是否生成bug报告')
        # 定义发送bug复选框
        self.send_bug_report = wx.CheckBox(self.panel, label='是否发送bug报告')
        self.send_bug_report.Show(False)


    # UI布局方法
    def ui_layout(self):
        # 测试框架配置文件,文本框,打开按钮水平布局
        boxsize1 = wx.BoxSizer()	# 默认水平布局
        boxsize1.Add(self.lbl_file, flag=wx.TOP | wx.LEFT, border=20)
        boxsize1.Add(self.text_file, flag=wx.ALL, proportion=1, border=20)	# proportion=1表示平铺展示,随着窗口的大小而变化
        # 表格形式测试报告,是否生成bug报告
        boxsize2 = wx.BoxSizer()
        boxsize2.Add(self.csv_report, flag=wx.LEFT, border=40)
        boxsize2.Add(self.bug_report, flag=wx.LEFT, border=20)

        # 生成HTML报告的单选框,垂直布局
        boxsize3 = wx.BoxSizer()
        boxsize3.Add(self.html_report, flag=wx.LEFT, border=20)

        # 打开 执行 重置 退出按钮 水平布局
        boxsize4 = wx.BoxSizer()
        boxsize4.Add(self.but_open, flag=wx.ALL, border=10)
        boxsize4.Add(self.but_run, flag=wx.ALL, border=10)
        boxsize4.Add(self.but_reset, flag=wx.ALL, border=10)
        boxsize4.Add(self.but_quit, flag=wx.ALL, border=10)

        # bug报告发送复选框
        boxsize6 = wx.BoxSizer()
        # wx.RESERVE_SPACE_EVEN_IF_HIDDEN即使控件被隐藏了也保留空间的位置
        boxsize6.Add(self.send_bug_report, flag=wx.RESERVE_SPACE_EVEN_IF_HIDDEN | wx.TOP, border=20)

        # 整体垂直布局垂直显示
        boxsize5 = wx.BoxSizer(wx.VERTICAL)
        boxsize5.Add(boxsize1, flag=wx.TOP | wx.EXPAND, border=20)
        boxsize5.Add(boxsize2)
        boxsize5.Add(boxsize6, flag=wx.LEFT, border=180, )
        boxsize5.Add(boxsize3, flag=wx.ALL, border=20)
        boxsize5.Add(boxsize4, flag=wx.LEFT, border=20)

        # 设置boxsizer生效
        self.panel.SetSizer(boxsize5)

    # UI事件绑定方法
    def ui_event(self):
        # 绑定执行按钮,点击执行按钮弹出选择文件对话框
        self.but_open.Bind(wx.EVT_BUTTON, self.open_file)
        # 点击执行按钮,读取csv文件内容
        self.but_run.Bind(wx.EVT_BUTTON, self.read_file)
        # 点击重置按钮,清空文本框的内容
        self.but_reset.Bind(wx.EVT_BUTTON, self.clear_text)
        # 点击退出按钮,退出程序
        self.but_quit.Bind(wx.EVT_BUTTON, self.quit)
        # 点击表格形式测试报告,显示是否生成bug报告
        self.csv_report.Bind(wx.EVT_RADIOBUTTON, self.show_bug_report)
        # 点击html形式,隐藏是否生成bug报告
        self.html_report.Bind(wx.EVT_RADIOBUTTON, self.hidbug_report)
        # 点击是否生成bug报告显示是否发送bug报告
        self.bug_report.Bind(wx.EVT_CHECKBOX, self.show_send_bug_report)

    # 显示发送bug报告
    def show_send_bug_report(self, event):
        if self.bug_report.GetValue():
            self.send_bug_report.Show(True)
        else:
            self.send_bug_report.Show(False)
    # 显示生成bug报告
    def show_bug_report(self, event):
        if self.csv_report.GetValue():
            self.bug_report.Show(True)

    # 隐藏生成bug报告
    def hidbug_report(self, event):
        if self.html_report.GetValue():
            self.bug_report.Show(False)

    # 打开配置文件方法
    def open_file(self, event):
        # 设置打开文件对话框
        dlg_open = wx.FileDialog(self.panel, message='打开文件', wildcard='*.csv', style=wx.FD_OPEN)
        # 选择文件后如果点击确定按钮,把文件的信息放入文本框中
        if dlg_open.ShowModal() == wx.ID_OK:
            self.file_path = dlg_open.GetPath()
            self.text_file.AppendText(self.file_path)

    # 读取配置文件的内容
    def read_file(self, event):
        # 判断文本框内容非空
        text = self.text_file.GetValue()
        if text == '':
            dlg = wx.MessageDialog(None, '必须选择配置文件', '错误提示信息', wx.YES_DEFAULT | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()
            return 0
        driver = FileReadDriver()
        # 判断要生成的报告类型
        if self.csv_report.GetValue():
            driver.csv_report(self.file_path, self.bug_report.GetValue(), self.send_bug_report.GetValue())
        elif self.html_report.GetValue():
            driver.html_report(self.file_path)
        else:
            dlg = wx.MessageDialog(None, '请选择测试报告的生成方式', '错误提示信息', wx.YES_DEFAULT | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()

    # 重置按钮
    def clear_text(self, event):
        self.text_file.Clear()

    # 退出按钮
    def quit(self, event):
        self.window.Destroy()

    # UI显示方法
    def ui_show(self):
        # 通过show()方法激活框架窗口。
        self.window.Show(True)
        # 输入Application对象的主事件循环来启动程序
        self.app.MainLoop()

# 程序入口
if __name__ == '__main__':
    obj = UITestFrame()
    obj.ui_layout()
    obj.ui_event()
    obj.ui_show()

第2个需求
在这里插入图片描述1.点击文件出现打开,关于,退出3个子菜单
2.点击打开按钮,打开文件对话框,可以选择csv文件,点击确定将csv的数据写入文本框内
3.点击关于按钮,弹出谢谢点击关于我们
4.点击退出,退出程序
5.下面的5个按钮没做任何操作
6.文本框,和按钮自适应窗口大小

class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(800,500))
        # style=wx.TE_MULTILINE多行文本编辑
        self.control = wx.TextCtrl(self, size=(500,300), style=wx.TE_MULTILINE)
        # 创建底部标题栏
        self.CreateStatusBar()
        # 创建子菜单
        filemenu= wx.Menu()

        # 打开 关于 退出 3个子菜单
        menuOpen = filemenu.Append(wx.ID_OPEN, "&打开"," Open a file to edit")
        menuItem = filemenu.Append(wx.ID_ABOUT, "关于"," Information about this program")
        # 菜单之间的分割线
        filemenu.AppendSeparator()
        menuExit = filemenu.Append(wx.ID_EXIT,"退出"," Terminate the program")

        # 按钮事件绑定
        self.Bind(wx.EVT_MENU, self.OnAbout, menuItem)
        self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
        self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen)

        # 水平布局的BoxSizer里面放了6个按钮
        self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        self.buttons = []
        for i in range(0, 6):
            self.buttons.append(wx.Button(self, -1, "Button &" + str(i)))
            self.sizer2.Add(self.buttons[i], 1, wx.EXPAND)

        # 多个boxsizer垂直布局
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        # 1, wx.EXPAND水平方向平铺
        self.sizer.Add(self.control, 1, wx.EXPAND)
        # 0, wx.EXPAND水平方向不平铺
        self.sizer.Add(self.sizer2, 0, wx.EXPAND)

        # Layout sizers
        self.SetSizer(self.sizer)
        self.SetAutoLayout(1)
        self.sizer.Fit(self)
        self.Show()

        # 创建菜单栏
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu, "文件")  # Adding the "filemenu" to the MenuBar
        self.SetMenuBar(menuBar)  # Adding the MenuBar to the Frame content.
        self.Show(True)


    def OnAbout(self, event):
        dlg = wx.MessageDialog(self, "谢谢点击关于我们", "About Sample Editor", wx.OK)
        dlg.ShowModal()  # Show it
        dlg.Destroy()  # finally destroy it when finished.

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

    def OnOpen(self, e):
        """ Open a file"""
        self.dirname = ''
        dlg = wx.FileDialog(self, "请选择一个文件", self.dirname, '', "*.csv", wx.FD_OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            self.filename = dlg.GetFilename()
            self.dirname = dlg.GetDirectory()
            f = open(os.path.join(self.dirname, self.filename), 'r')
            self.control.SetValue(f.read())
            f.close()
        dlg.Destroy()
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值