class UserInterface: def __init__(self,cbs): # self.cbs ={'btn_send':cb_send,'btn_recv':cb_recv} self.btn_list = [] self.master = Tk() self.master.title("TripleX - Version:1.0.0") self.master.geometry('350x210') frm_btn = Frame(self.master,bg='#141414') # 操作按钮 frm_msg = Frame(self.master) # 信息展示 frm_btn_bar = Frame(self.master) # 进度信息条 frm_btn.pack(expand=True) frm_msg.pack(expand=True, fill = X) frm_btn_bar.pack(expand=True, fill = X) self.btn_send = Button(frm_btn, command=lambda: cbs('COPY'), text='发送') self.btn_send.pack(side=LEFT) self.btn_recv = Button(frm_btn, command=lambda: cbs('PASTE'), text='接收') self.btn_recv.pack(side=RIGHT) self.btn_cancle = Button(frm_btn, command=lambda: cbs('CANCLE'), text='取消操作') self.msgbox = Text(frm_msg, bg='#FAFAFA', height=10) self.msgbox.pack() self.msgbox.config(state=DISABLED) self.lable_text = StringVar() self.lable_text.set('状态 ') self.btn_lable = Label(frm_btn_bar, textvariable=self.lable_text) self.btn_lable.pack(side=LEFT) self.pro_bar = Progressbar(frm_btn_bar) def action_btn_switch(self, condition = True): if condition: self.btn_send.pack(side=LEFT) self.btn_recv.pack(side=RIGHT) self.btn_cancle.forget() else: self.btn_send.forget() self.btn_recv.forget() self.btn_cancle.pack(side=LEFT) def set_bottom_state(self, str): if str: self.lable_text.set(str) def progress_bar_visuality(self, condition): ''' 设置底部进度条的可视性 参数: True: 显示 False: 隐藏 ''' if condition: self.pro_bar.pack(side=LEFT, fill = X, expand =True) else: self.pro_bar.forget() def set_progress_bar(self, value): self.pro_bar["value"]= value return value def start_mainloop(self): self.master.mainloop() def msgbox_insert(self, str): self.msgbox.config(state=NORMAL) self.msgbox.insert(INSERT, str) self.msgbox.config(state=DISABLED)
class Window(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.master = master self.master.title("RakugoDocs Test Tool") self.master.geometry("400x100") self.label = Label(self, text="Click on Button to Start") self.label.pack(fill=X, expand=1, side=TOP) # Progress bar widget self.progress = Progressbar(self, orient=HORIZONTAL, length=100, mode='determinate') self.progress.pack(fill=X) self.progress.forget() self.local_button = Button(self, text="Local", command=self.on_local) self.local_button.pack(fill=BOTH, expand=1) self.rtd_button = Button(self, text="ReadTheDocs", command=self.on_rtd) self.rtd_button.pack(fill=BOTH, expand=1) # widget can take all window self.pack(fill=BOTH, expand=1) # Execute Tkinter self.mainloop() def update_progress(self, value): self.progress['value'] = value * 100 def preparing_files_ui(self, progress): p_text = "Preparing files " self.label["text"] = p_text + progress self.update_progress(0) self.progress.pack(fill=X, expand=1) def search_text_update(self, s_text): if "..." in self.label["text"]: self.label["text"] = s_text else: self.label["text"] += "." def on_local(self): self.local_button.forget() self.rtd_button.forget() self.fix_files("local") def on_rtd(self): self.local_button.forget() self.rtd_button.forget() self.fix_files("rtd") def fix_files(self, mode): s_text = "Search for files " self.label["text"] = s_text files = [] for p in paths: self.search_text_update(s_text) for f in os.listdir(p): fp = os.path.join(p, f) files.append(fp) self.search_text_update(s_text) self.preparing_files_ui("1/3") i = 0 l = len(files) for file in files: if ".md" in file: md_file = os.path.join(file) md_files.append(md_file) i += 1 self.update_progress(i / l) # print(md_file) self.preparing_files_ui("2/3") i = 0 l = len(md_files) files_to_change = {} for file in md_files: with open(file, "r") as f: lines = [] for line in f: found = False if mode == "rtd": if ".html#" in line: line = line.replace(".html#", "/#") found = True if mode == "local": if "/#" in line: line = line.replace("/#", ".html#") found = True lines.append(line) if found: files_to_change[file] = lines print(file, len(files_to_change[file])) i += 1 print("added", file) self.update_progress(i / l) self.preparing_files_ui("3/3") i = 0 l = len(files_to_change) for file in files_to_change: with open(file, "w") as w: w.writelines(files_to_change[file]) i += 1 self.update_progress(i / l) self.label["text"] = "Finished" self.progress.forget() if mode == "local": self.rtd_button.pack() if mode == "rtd": self.local_button.pack()