• tkinter模块解读和使用


    之前有个项目需要带多个不太懂代码的小伙伴测试,而且测试前置条件比较多,必须使用自动化,最终选择tkinter库做图形化界面。

    一、大致了解tkinter

    整理成思维导图

     二、编写脚本,打包成exe文件

    写了一个demo如下,点击按钮可以调用不同函数,并且打印日志到text框里

    1. mport time
    2. from tkinter import *
    3. LOG_LINE_NUM = 0
    4. class MigrateTest:
    5. def __init__(self, init_window):
    6. # 创建主窗口对象
    7. self.init_window = init_window
    8. # 定义主窗口属性
    9. self.init_window.title("云厂商迁移测试 developed by ronghuang")
    10. def layout(self):
    11. """控件布局"""
    12. lables = [
    13. {'用户信息': {'row': 0, 'column': 0}},
    14. {'手机号': {'row': 1, 'column': 0}},
    15. {'密码': {'row': 1, 'column': 2}},
    16. {'迁移的表': {'row': 1, 'column': 4}}
    17. ]
    18. for lable in lables:
    19. for key, value in lable.items():
    20. Label(master=self.init_window, text=key).grid(**value)
    21. # Entry
    22. entry_list = [
    23. {'info_phone': {'row': 1, 'column': 1}},
    24. {'info_pwd': {'row': 1, 'column': 3}},
    25. {'info_table': {'row': 1, 'column': 5}}
    26. ]
    27. for entry in entry_list:
    28. for key, value in entry.items():
    29. setattr(self, key, Entry(master=self.init_window))
    30. getattr(self, key).grid(**value)
    31. # text 控件:存放log
    32. setattr(self, 'log_text', Text(self.init_window, width=80, height=50))
    33. getattr(self, 'log_text').place(x=120, y=62)
    34. # button: command
    35. buttons = [{'堵塞io': 'self.prinf'}, {'删除堵塞': 'self.prinf'}, {'查询堵塞': 'self.prinf'},
    36. {'切换到七牛':'self.prinf'}, {'切换到阿里':'self.prinf'}, {'切换到自建存储':'self.prinf'},
    37. {'切换到腾讯':'self.prinf'}, {'查询服务端bucket':'self.prinf'}, {'查询服务端路由':'self.prinf'},
    38. {'重置账号密码':'self.prinf'}, {'关闭当前窗口':'self.init_window.destroy'}]
    39. for button in buttons:
    40. for text, command in button.items():
    41. button_bloke = Button(self.init_window, text=text, command=eval(command), width=15)
    42. row = (buttons.index(button) + 1) * 2 + 1
    43. button_bloke.grid(row=row, column=0) #0:3,1:5,2:7
    44. def write_log(self, msg):
    45. log_lines = 20
    46. global LOG_LINE_NUM
    47. current_time = time.strftime('%Y-%m-%d %H:%M:%S')
    48. logmsg_in = str(current_time) +" " + str(msg) + "\n" # 换行
    49. if LOG_LINE_NUM <= log_lines:
    50. getattr(self, 'log_text').insert(END, logmsg_in)
    51. LOG_LINE_NUM += 1
    52. else:
    53. getattr(self, 'log_text').delete(1.0, 2.0)
    54. getattr(self, 'log_text').insert(END, logmsg_in)
    55. # 功能函数
    56. def get_info(self):
    57. # for attr in ['info_phone', 'info_pwd', 'info_table']:
    58. # arrti_list = []
    59. # arrti_list.append(getattr(self, attr).get())
    60. arrti_list = [getattr(self, attr).get() for attr in ['info_phone', 'info_pwd', 'info_table']]
    61. self.write_log(tuple(arrti_list))
    62. return tuple(arrti_list)
    63. def prinf(self):
    64. # 输出到界面
    65. arrti_list = []
    66. for attr in ['info_phone', 'info_pwd', 'info_table']:
    67. arrti_list.append(getattr(self, attr).get())
    68. self.write_log(tuple(arrti_list))
    69. return tuple(arrti_list)
    70. def run_main():
    71. """运行主函数"""
    72. init_window = Tk()
    73. migrate = MigrateTest(init_window)
    74. migrate.layout()
    75. init_window.mainloop()
    76. if __name__ == '__main__':
    77. run_main()

    打包exe文件:

    依赖第三方库:pyinstaller

    使用命令:pyinstaller -D filename.py

     

     

  • 相关阅读:
    干货 | 接口自动化测试分层设计与实践总结
    计算机视觉(Computer Vision, CV)是什么?
    基于微信小程序的图书馆选座系统源码
    处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具
    C++11 右值,右值引用,移动构造,移动赋值
    零基础自学javase黑马课程第十三天
    软件设计模式系列之二十一——观察者模式
    【代表团坐车】Python 实现-附ChatGPT解析
    GO语言里的Log4j
    c语言程序设计课后习题答案
  • 原文地址:https://blog.csdn.net/lanniya152/article/details/126591436