import sys import tkinter import tkinter.ttk import tkinter.filedialog class Window(tkinter.Tk): element = {} def __init__(self): super().__init__() self.title('标题') self.w = 550 self.h = 450 self.geometry('%sx%s+%s+%s' % (self.w, self.h, int(self.winfo_screenwidth() / 2 - self.w / 2), int(self.winfo_screenheight() / 2 - self.h / 2))) self.minsize(self.w, self.h) def into_element(self, name, element): self.element[name] = element return self def cl(self, row, col, name, text): this = tkinter.Label(self, text=text) this.grid(row=row, column=col, padx=4, pady=4, sticky='w') self.into_element(name, this) return self def ce(self, row, col, name, text): this = tkinter.Entry(self, bg='yellow', width=48) this.insert(0, text) this.grid(row=row, column=col, padx=4, pady=4, sticky='w') self.into_element(name, this) return self def cu(self, row, col, name, text): this = tkinter.Entry(self, width=48, state='readonly') this.insert(0, text) this.grid(row=row, column=col, padx=4, pady=4, sticky='w') self.into_element(name, this) return self def cb(self, row, col, name, text, func): this = tkinter.Button(self, text=text, command=self.__getattribute__(func)) this.grid(row=row, column=col, padx=4, pady=0, sticky='w') self.into_element(name, this) return self def cs(self, row, col, name, data): this = tkinter.Spinbox(self, values=data, width=25, state='readonly') this.grid(row=row, column=col, padx=4, pady=0, sticky='w') self.into_element(name, this) return self def cc(self, row, col, name, data): this = tkinter.ttk.Combobox(self, values=data, width=20, state='readonly') this.set(data[-1]) this.grid(row=row, column=col, padx=4, pady=0, sticky='w') self.into_element(name, this) return self @staticmethod def cu_set(element, text): element.config(state='normal') element.delete(0, 'end') element.insert('end', text) element.config(state='readonly') def open_w(self): self.cu_set(self.element['i_w'], tkinter.filedialog.askopenfilename(filetypes=[('Excel 文件', '*.xlsx')])) def open_p(self): self.cu_set(self.element['i_p'], tkinter.filedialog.asksaveasfilename(filetypes=[('HTML 文件', '*.html')], defaultextension='html', initialfile='test')) def open_x(self): self.cu_set(self.element['i_x'], tkinter.filedialog.asksaveasfilename(filetypes=[('LOG 文件', '*.log')], defaultextension='log', initialfile='test')) def exec_test(self): self.element['b_z'].config(state='disabled') self.update() import time time.sleep(15) # self.element['b_z'].grid_forget() from Base.Class.Command import shell import sys # shell(cmd='ping 119.29.29.29', stdout=sys.stdout) res = shell(cmd='ping 119.29.29.29 -n 2', stdout=sys.__stdout__, stderr=sys.__stderr__) # sys.stdout.write(res['stdout']) # sys.stderr.write(res['stderr']) # import os # os.system('ping 119.29.29.29') self.element['b_z'].config(state='normal') self.update() win = Window() win.cl(0, 0, 'l_w', '测试用例(必选)') win.cu(0, 1, 'i_w', '') win.cb(0, 2, 'b_w', '选择文件', 'open_w') win.cl(1, 0, 'l_t', '用例名称(必选)') win.ce(1, 1, 'i_t', '') win.cl(2, 0, 'l_m', '模块名称') win.ce(2, 1, 'i_m', '') win.cl(3, 0, 'l_n', '用例编号') win.ce(3, 1, 'i_n', '') win.cl(4, 0, 'l_l', '用例级别') win.ce(4, 1, 'i_l', '') win.cl(5, 0, 'l_o', '用例组织模式') win.cc(5, 1, 'i_o', ['根据级别分类', '根据顺序执行']) win.cl(6, 0, 'l_r', '写入测试结果') win.cc(6, 1, 'i_r', ['是', '否']) win.cl(7, 0, 'l_v', '日志和报告详细度') win.cc(7, 1, 'i_v', [1, 2, 3, 4, 5]) win.cl(8, 0, 'l_p', '报告输出路径') win.cu(8, 1, 'i_p', './') win.cb(8, 2, 'b_p', '选择目录', 'open_p') win.cl(9, 0, 'l_x', '日志输出路径') win.cu(9, 1, 'i_x', './') win.cb(9, 2, 'b_x', '选择目录', 'open_x') win.cl(10, 0, 'l_i', '报告标题') win.ce(10, 1, 'i_i', '自动化测试报告') win.cl(11, 0, 'l_d', '报告描述') win.ce(11, 1, 'i_d', '暂无描述') win.cb(12, 0, 'b_z', '执行测试', 'exec_test') win.mainloop()