前言
因为写好了测试xmind脑图后,然后再编写测试用例,实在是太麻烦了,所以我写了一点测试用例后,就网上百度了下,怎么直接把xmind脑图转换成excel测试用例,纯个人学习笔记
本文参考:
https://www.jb51.net/article/197246.htm
https://www.jb51.net/article/197249.htm
提示:以下是本篇文章正文内容,下面可供参考
一、确定好自己的xmind的用例格式
因为xmind的格式关系到编写代码的逻辑关系,所以需要先确定好自己的xmind的格式,本人学习时使用的格式如下:
二、xmindparser库的使用
1.下载库
默认下载最新库,在配好环境python环境变量的前提下,cmd中输入如下命令:
pip install xmindparser
或直接在pycharm中,点击左上角“File” > Settings(或者直接Ctrl+Alt+s) > Project:你的项目名称 > Python Interpreter > + > 搜索xmindparser > Install Package
2.xmindparser的使用
代码如下(示例):
from xmindparser import xmind_to_dict import json xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic'] # indent为显示json格式,ensure_ascii未显示为中文,不显示ASCII码 print(json.dumps(xm, indent=2, ensure_ascii=False))
运行结果显示为:
{ "title": "sulinkAPP", "topics": [{ "title": "登录", "topics": [{ "title": "正向用例", "topics": [{ "title": "正确的手机号码一键登录", "topics": [{ "title": "进入‘登录/注册'页面", "topics": [{ "title": "成功进入‘登录/注册'页面" }] }, { "title": "选中‘我已阅读并同意用户协议',点击‘本机号码一键登录'", "topics": [{ "title": "进入‘手机快捷登录页面'" }] }, { "title": "点击‘一键登录'", "topics": [{ "title": "登录成功,跳转至‘我的'页面" }] }] }, { "title": "正确的手机号码及验证码登录", "topics": [{ "title": "进入‘登录/注册'页面", "topics": [{ "title": "成功进入‘登录/注册'页面" }] }, { "title": "点击‘其他登录方式'", "topics": [{ "title": "成功进入‘手机登录'页面" }] }, { "title": "选择正确的区号,输入正确的手机号码,点击‘获取验证码'", "topics": [{ "title": "提示‘验证码已发送',并正确收到验证码" }] }, { "title": "正确输入收到的验证码,选中‘我已阅读并同意用户协议',点击登录", "topics": [{ "title": "登录成功,跳转至‘我的'页面" }] }] }] }] }] }
三、xlwt库的使用
1.下载xlwt库
默认下载最新库,在配好环境python环境变量的前提下,cmd中输入如下命令:
pip install xlwt
或如同xmindparser一样,在pycharm中下载
2.xlwt库的简单使用
简单的使用如下:
import xlwt # 导入模块 workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook 对象 worksheet = workbook.add_sheet('sheet1') # 创建工作表sheet worksheet.write(0, 0, 'hello') # 往表中写内容,第一各参数 行,第二个参数列,第三个参数内容 workbook.save('students.xls') # 保存表为students.xls
详细的使用,可以参照此文章:https://www.jb51.net/article/154535.htm
四、读取xmind数据并写入excel表格中
1.简单的创建一个用例excel表格,并写入第一行数据
代码如下
import xlwt # 导入模块 from xmindparser import xmind_to_dict xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic'] # 读取xmind数据 workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象 worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表,并设置可以重写单元格内容 row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员'] # 写成excel表格用例的要素 for i in range(len(row0)): worksheet.write(0, i, row0[i])
2.读取xmind数据,然后写入上面表格中
在上面的代码的基础上添加点,把xmind数据写入excel表格中
import xlwt # 导入模块 from xmindparser import xmind_to_dict xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic'] # 读取xmind数据 workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象 worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表,并设置可以重写单元格内容 row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员'] # 写成excel表格用例的要素 for i in range(len(row0)): worksheet.write(0, i, row0[i]) x = 0 # 写入数据的当前行数 z = 0 # 用例的编号 for i in range(len(xm["topics"])): test_module = xm["topics"][i] for j in range(len(test_module["topics"])): test_suit = test_module["topics"][j] for k in range(len(test_suit["topics"])): test_case = test_suit["topics"][k] z += 1 c1 = len(test_case["topics"]) # 执行步骤有几个 for n in range(len(test_case["topics"])): x += 1 test_step = test_case["topics"][n] test_except = test_step["topics"][0] worksheet.write(x, 4, f"{n + 1}." + test_except["title"]) # 预期结果 worksheet.write(x, 3, f"{n + 1}." + test_step["title"]) # 执行步骤 worksheet.write_merge(x - c1 + 1, x, 0, 0, z) # testcaseid worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module["title"]) # 测试需求名称 worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case["title"]) # 测试用例名称 workbook.save(xm["title"] + ".xls") # xls名称取xmind主题名称
3.调整下表格的格式
在上面的代码的基础上修改下,简单的增加表格的样式
import xlwt # 导入模块 from xmindparser import xmind_to_dict def styles(): """设置单元格的样式的基础方法""" style = xlwt.XFStyle() return style def borders(status=1): """设置单元格的边框 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13""" border = xlwt.Borders() border.left = status border.right = status border.top = status border.bottom = status return border def heights(worksheet, line, size=4): """设置单元格的高度""" worksheet.row(line).height_mismatch = True worksheet.row(line).height = size*256 def widths(worksheet, line, size=11): """设置单元格的宽度""" worksheet.col(line).width = size*256 def alignments(**kwargs): """设置单元格的对齐方式 status有两种:horz(水平),vert(垂直) horz中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右边),LEFT(左边) vert中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),BOTTOM(下方),TOP(上方)""" alignment = xlwt.Alignment() if "horz" in kwargs.keys(): alignment.horz = eval(f"xlwt.Alignment.HORZ_{kwargs['horz'].upper()}") if "vert" in kwargs.keys(): alignment.vert = eval(f"xlwt.Alignment.VERT_{kwargs['vert'].upper()}") alignment.wrap = 1 # 设置自动换行 return alignment def fonts(name='宋体', bold=False, underline=False, italic=False, colour='black', height=11): """设置单元格中字体的样式 默认字体为宋体,不加粗,没有下划线,不是斜体,黑色字体""" font = xlwt.Font() # 字体 font.name = name # 加粗 font.bold = bold # 下划线 font.underline = underline # 斜体 font.italic = italic # 颜色 font.colour_index = xlwt.Style.colour_map[colour] # 大小 font.height = 20 * height return font def patterns(colors=1): """设置单元格的背景颜色,该数字表示的颜色在xlwt库的其他方法中也适用,默认颜色为白色 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on...""" pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = colors return pattern def main(): xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic'] # print(json.dumps(xm, indent=2, ensure_ascii=False)) # indent为显示json格式,ensure_ascii为显示为中文,不显示ASCII码 workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象 worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表 row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员'] sizes = [10, 11, 30, 60, 50, 11, 11, 11] dicts = {"horz": "CENTER", "vert": "CENTER"} style2 = styles() style2.alignment = alignments(**dicts) style2.font = fonts() style2.borders = borders() style2.pattern = patterns(7) heights(worksheet, 0) for i in range(len(row0)): worksheet.write(0, i, row0[i], style2) widths(worksheet, i, size=sizes[i]) style = styles() style.borders = borders() x = 0 # 写入数据的当前行数 z = 0 # 用例的编号 for i in range(len(xm["topics"])): test_module = xm["topics"][i] for j in range(len(test_module["topics"])): test_suit = test_module["topics"][j] for k in range(len(test_suit["topics"])): test_case = test_suit["topics"][k] z += 1 c1 = len(test_case["topics"]) # 执行步骤有几个 for n in range(len(test_case["topics"])): x += 1 test_step = test_case["topics"][n] test_except = test_step["topics"][0] worksheet.write(x, 4, f"{n + 1}." + test_except["title"], style) # 预期结果 worksheet.write(x, 3, f"{n + 1}." + test_step["title"], style) # 执行步骤 worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # testcaseid worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module["title"], style) # 测试需求名称 worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case["title"], style) # 测试用例名称 workbook.save(xm["title"] + ".xls") # xls名称取xmind主题名称 if __name__ == "__main__": main()
运行结果如下:
4.封装方法
上面的代码基本已经完成了,但是为了更好看,代码可读性更高,所以封装下方法
# -*- coding:utf-8 -*- from xmindparser import xmind_to_dict import xlwt class XlwtSeting(object): @staticmethod # 静态方法装饰器,使用此装饰器装饰后,可以直接使用类名.方法名调用(XlwtSeting.styles()),并且不需要self参数 def template_one(worksheet): dicts = {"horz": "CENTER", "vert": "CENTER"} sizes = [15, 15, 30, 60, 45, 45, 15, 15] se = XlwtSeting() style = se.styles() style.alignment = se.alignments(**dicts) style.font = se.fonts(bold=True) style.borders = se.borders() style.pattern = se.patterns(7) se.heights(worksheet, 0) for i in range(len(sizes)): se.widths(worksheet, i, size=sizes[i]) return style @staticmethod def template_two(): dicts2 = {"vert": "CENTER"} se = XlwtSeting() style = se.styles() style.borders = se.borders() style.alignment = se.alignments(**dicts2) return style @staticmethod def styles(): """设置单元格的样式的基础方法""" style = xlwt.XFStyle() return style @staticmethod def borders(status=1): """设置单元格的边框, 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13""" border = xlwt.Borders() border.left = status border.right = status border.top = status border.bottom = status return border @staticmethod def heights(worksheet, line, size=4): """设置单元格的高度""" worksheet.row(line).height_mismatch = True worksheet.row(line).height = size * 256 @staticmethod def widths(worksheet, line, size=11): """设置单元格的宽度""" worksheet.col(line).width = size * 256 @staticmethod def alignments(wrap=1, **kwargs): """设置单元格的对齐方式, :接收一个对齐参数的字典{"horz": "CENTER", "vert": "CENTER"}horz(水平),vert(垂直) :horz中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右边),LEFT(左边) :vert中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),BOTTOM(下方),TOP(上方)""" alignment = xlwt.Alignment() if "horz" in kwargs.keys(): alignment.horz = eval(f"xlwt.Alignment.HORZ_{kwargs['horz'].upper()}") if "vert" in kwargs.keys(): alignment.vert = eval(f"xlwt.Alignment.VERT_{kwargs['vert'].upper()}") alignment.wrap = wrap # 设置自动换行 return alignment @staticmethod def fonts(name='宋体', bold=False, underline=False, italic=False, colour='black', height=11): """设置单元格中字体的样式, 默认字体为宋体,不加粗,没有下划线,不是斜体,黑色字体""" font = xlwt.Font() # 字体 font.name = name # 加粗 font.bold = bold # 下划线 font.underline = underline # 斜体 font.italic = italic # 颜色 font.colour_index = xlwt.Style.colour_map[colour] # 大小 font.height = 20 * height return font @staticmethod def patterns(colors=1): """设置单元格的背景颜色,该数字表示的颜色在xlwt库的其他方法中也适用,默认颜色为白色 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on...""" pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = colors return pattern class XmindToXsl(XlwtSeting): def __init__(self, name): """调用类时,读取xmind文件,并生成excel表格""" try: self.xm = xmind_to_dict(name)[0]['topic'] except Exception as e: print(f"打开xmind文件失败:{e}") self.workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象 self.worksheet = self.workbook.add_sheet(self.xm["title"], cell_overwrite_ok=True) # 创建工作表 def save(self, name): """保存表格""" self.workbook.save(name + ".xls") @staticmethod def xmind_num(value): """获取xmind标题个数""" try: return len(value["topics"]) except KeyError: return 0 @staticmethod def xmind_title(value): """获取xmind标题内容""" return value["title"] def write_excel(self, result='', performer='', editionname=''): """生成excel文件的方法""" row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '实际结果', '执行人员', '版本'] style2 = self.template_one(self.worksheet) for i in range(len(row0)): self.worksheet.write(0, i, row0[i], style2) style = self.template_two() x = 0 # 写入数据的当前行数 z = 0 # 用例的编号 for i in range(self.xmind_num(self.xm)): test_module = self.xm["topics"][i] modnum = self.xmind_num(test_module) if modnum != 0: for j in range(modnum): test_suit = test_module["topics"][j] suit_num = self.xmind_num(test_suit) if suit_num != 0: for k in range(suit_num): test_case = test_suit["topics"][k] z += 1 c1 = self.xmind_num(test_case) # 执行步骤有几个 if c1 != 0: for n in range(c1): x += 1 test_step = test_case["topics"][n] test_except = test_step["topics"][0] self.heights(self.worksheet, x, size=2) step = f"{n + 1}." + self.xmind_title(test_step) # 执行步骤 exce = f"{n + 1}." + self.xmind_title(test_except) # 预期结果 self.worksheet.write(x, 3, step, style) # 写入执行步骤 self.worksheet.write(x, 4, exce, style) # 写入预期结果 self.worksheet.write(x, 5, result, style) # 写入实际结果 self.worksheet.write(x, 6, performer, style) # 写入执行人 mod = self.xmind_title(test_module) # 测试需求名称 case = self.xmind_title(test_case) # 测试用例名称 self.worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # 写入testcaseid self.worksheet.write_merge(x - c1 + 1, x, 1, 1, mod, style) # 写入测试需求名称 self.worksheet.write_merge(x - c1 + 1, x, 2, 2, case, style) # 写入测试用例名称 self.worksheet.write_merge(x - c1 + 1, x, 7, 7, editionname, style) # 写入版本名称 else: print("测试用例没有操作步骤及预期结果") else: print("没有测试用例") else: print("没有测试套件") self.save(self.xm["title"]) # 保存 if __name__ == "__main__": names = "sulinkAPP.xmind" xx = XmindToXsl(names) xx.write_excel()
运行的结果如下:
五、创建一个简单的GUI页面
1.简单使用tkinter
因为不需要太复杂的GUI页面,所以我直接使用的是python自带的tkinter库,先简单了解下tkinter库怎么使用,参考文档:https://blog.csdn.net/qq_46018418/article/details/105927203
import tkinter top = tkinter.Tk() # 生成主窗口 label = tkinter.Label(top, text='Hello, GUI') # 生成标签 label.pack() # 将标签添加到主窗口 button1 = tkinter.Button(top, text="text") # 生成按钮1 button1.pack(side=tkinter.LEFT) # 将button1添加到top主窗口左边 button1 = tkinter.Button(top, text="text2") # 生成按钮2 button1.pack(side=tkinter.RIGHT) # 将button1添加到top主窗口左边 top.mainloop() # 进入消息循环(必需组件)
代码运行结果如下:
2.使用tkinter创建一个简单的GUI页面
先初步使用tkinter创建一个简单的GUI页面,初步了解tkinter的使用细节
import tkinter def getvalue(): """获取文本框中数据""" global path re = path.get() print(re) top = tkinter.Tk() # 生成主窗口 top.title("test") # 设置窗口的标题 top.geometry("350x250") # 设置窗口的大小 top.geometry('+800+350') # 设置窗口出现的位置 top.resizable(0, 0) # 将窗口大小设置为不可变 label = tkinter.Label(top, text='目标路径') # 生成一个标签 label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列 path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容 firstEntry = tkinter.Entry(top, textvariable=path) # 生成一个文本框,内容保存在上面变量中 firstEntry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列 # 生成一个按钮,按钮上显示文字为“test”,设置点击按钮后,执行command后面的方法 # (注意:只写方法名,保存方法的位置,不能加上()来调用)例:getvalue,不能写成getvalue() clickButton = tkinter.Button(top, text="提交", command=getvalue) clickButton.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列 top.mainloop() # 进入消息循环(必需组件)
3.丰富GUI页面元素
进一步使用tkinter,把之前封装的方法需要的参数,看情况添加上GUI页面中
import tkinter from tkinter.filedialog import askopenfilename def get_value(): """获取文本框中数据""" re = path.get() per = person.get() ver = version.get() print(f"地址:{re},测试人员:{per},测试版本:{ver}") def select_path(): """选择要转换成excel的xmind地址""" path_ = askopenfilename() path.set(path_) top = tkinter.Tk() # 生成主窗口 top.title("test") # 设置窗口的标题 top.geometry("350x250") # 设置窗口的大小 top.geometry('+800+350') # 设置窗口出现的位置 top.resizable(0, 0) # 将窗口大小设置为不可变 # 文件的路径 first_label = tkinter.Label(top, text='目标路径:') # 生成一个标签 first_label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列 path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容 first_entry = tkinter.Entry(top, textvariable=path) # 生成一个文本框,内容保存在上面变量中 first_entry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列 # 生成一个按钮,按钮上显示文字为“test”,设置点击按钮后,执行command后面的方法 # (注意:只写方法名,保存方法的位置,不能加上()来调用)例:get_value,不能写成get_value() way_button = tkinter.Button(top, text="路径选择", command=select_path) way_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列 # 测试人员 second_label = tkinter.Label(top, text="执行人员:") second_label.grid(row=1, column=0) person = tkinter.StringVar() second_entry = tkinter.Entry(top, textvariable=person) second_entry.grid(row=1, column=1) # 版本 third_label = tkinter.Label(top, text="测试版本:") third_label.grid(row=2, column=0) version = tkinter.StringVar() third_entry = tkinter.Entry(top, textvariable=version) third_entry.grid(row=2, column=1) # 提交按钮 f_btn = tkinter.Frame(top, bg='red') # 设置一个frame框架,并设置背景颜色为红色 f_btn.place(x=0, y=205, width=350, height=45) # 设置框架的大小,及在top窗口显示位置 submit_button = tkinter.Button(f_btn, text="提交", command=get_value, width=49, height=2, bg="#00FFFF") # 设置按钮的文字,调用方法,大小,颜色,显示框架 submit_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第一列 # 进入消息循环(必需组件) top.mainloop()
代码运行结果如下:
4.封装方法,关联转换方法
上面代码已经初步实现了所需的功能,下面进行封装方法,关联之前写好的xmind转换excel表格的方法
import tkinter import re from tkinter.filedialog import askopenfilename from tkinter import messagebox from xmindToExcel.xmind_to_xls import XmindToXsl class MainUI(object): def __init__(self, title="sulink", geometrysize="350x250", geometry="+800+350"): self.top = tkinter.Tk() # 生成主窗口 self.top.title(title) # 设置窗口的标题 self.top.geometry(geometrysize) # 设置窗口的大小 self.top.geometry(geometry) # 设置窗口出现的位置 self.top.resizable(0, 0) # 将窗口大小设置为不可变 self.path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容 self.person = tkinter.StringVar() self.version = tkinter.StringVar() # 调用自己写的create_widgets()方法 self.create_widgets() def get_value(self): """获取文本框中数据,并调用XmindToXsl类""" path = self.path.get() per = self.person.get() ver = self.version.get() print(f"地址:{path},测试人员:{per},测试版本:{ver}") regvalue = '.*\.xmind$' xmind_reg = re.match(regvalue, path) if xmind_reg: # xmind转换成xls xmind_to_xls = XmindToXsl(path) xmind_to_xls.write_excel(performer=per, editionname=ver) else: messagebox.showinfo(title='提示', message='请选择正确的xmind文件,谢谢!') def select_path(self): """选择要转换成excel的xmind地址""" path_ = askopenfilename() self.path.set(path_) def create_widgets(self): """创建窗口中的各种元素""" # 文件的路径 first_label = tkinter.Label(self.top, text='目标路径:') # 生成一个标签 first_label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列 first_entry = tkinter.Entry(self.top, textvariable=self.path) # 生成一个文本框,内容保存在上面变量中 first_entry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列 way_button = tkinter.Button(self.top, text="路径选择", command=self.select_path) way_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列 # 测试人员 second_label = tkinter.Label(self.top, text="执行人员:") second_label.grid(row=1, column=0) second_entry = tkinter.Entry(self.top, textvariable=self.person) second_entry.grid(row=1, column=1) # 版本 third_label = tkinter.Label(self.top, text="测试版本:") third_label.grid(row=2, column=0) third_entry = tkinter.Entry(self.top, textvariable=self.version) third_entry.grid(row=2, column=1) # 提交按钮 f_btn = tkinter.Frame(self.top, bg='red') # 设置一个frame框架,并设置背景颜色为红色 f_btn.place(x=0, y=205, width=350, height=45) # 设置框架的大小,及在top窗口显示位置 submit_button = tkinter.Button(f_btn, text="提交", command=self.get_value, width=49, height=2, bg="#00FFFF") # 设置按钮的文字,调用方法,大小,颜色,显示框架 submit_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第一列 # 进入消息循环(必需组件) self.top.mainloop() if __name__ == "__main__": mu = MainUI(title="sulinkAPP")
代码运行结果如下:
六、打包
1.下载安装pyinstaller
下载安装pyinstaller 库,建议使用pip在线下载安装,因为有较多依赖库,pip下载安装时,会自动安装依赖库
pip install pyinstaller
2.使用pyinstaller打包文件
如编写上面全部代码的环境为虚拟环境,则打包时需要在主环境安装编写时导入的库(如:xmindparser,xlwt),如果没有使用虚拟环境,则不需重复安装。
安装好pyinstaller后,到项目的目录下,运行cmd,输入命令。
pyinstaller -F mainUI.py -p xmind_to_xls.py
-F 后是main文件,-p 后是自己编写的依赖py文件,多个文件使用;分隔。
因为是自己学习,所以直接把mainUI文件当做main文件。
注:如果运行打包后的exe文件包,报“xlwt no find”之类的错,请在主环境pip下载安装对应的库
# 总结 以上就是这几天学习的结果,感觉还是学习到了不少东西,希望能够帮助到你们
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]