import re import threading import wx import setting from comment import CommentManager def show_warning(content, click=None): toastone = wx.MessageDialog(None, content, "提示", wx.YES_DEFAULT | wx.ICON_WARNING) if toastone.ShowModal() == wx.ID_YES: # 如果点击了提示框的确定按钮 if click is not None: click() toastone.Destroy() def show_info(content, click=None): toastone = wx.MessageDialog(None, content, "提示", wx.YES_DEFAULT | wx.ICON_INFORMATION) if toastone.ShowModal() == wx.ID_YES: # 如果点击了提示框的确定按钮 click() toastone.Destroy() class MainFrame(wx.Frame): def __bind_event(self): def on_select_chrome_file(event): open_file_dialog = wx.FileDialog(self, "选择文件", "", "", "所有文件 (*.exe)|*.exe", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) # 显示对话框并等待用户操作 if open_file_dialog.ShowModal() == wx.ID_OK: # 获取用户选择的文件路径 path = open_file_dialog.GetPath() self.text_chrome_path.SetValue(path) # 销毁对话框 open_file_dialog.Destroy() def on_select_chromdriver_file(event): open_file_dialog = wx.FileDialog(self, "选择文件", "", "", "所有文件 (*.exe)|*.exe", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) # 显示对话框并等待用户操作 if open_file_dialog.ShowModal() == wx.ID_OK: # 获取用户选择的文件路径 path = open_file_dialog.GetPath() self.text_chromedriver_path.SetValue(path) # 销毁对话框 open_file_dialog.Destroy() def start_comment(event): if self.comment_manager: self.comment_manager.close() self.comment_manager = CommentManager() threading.Thread(target=lambda: self.comment_manager.start_process_comment(), daemon=True).start() def on_save(event): # 保存配置 chrome_path = self.text_chrome_path.GetValue() if not chrome_path: show_warning("请填写谷歌浏览器路径") return chromedriver_path = self.text_chromedriver_path.GetValue() if not chromedriver_path: show_warning("请填写谷歌浏览器驱动路径") return like = self.cb_like.GetValue() comment = self.cb_comment.GetValue() comment_templates = self.text_comments.GetValue() setting.set_click_like(like) setting.set_chrome_path(chrome_path) setting.set_chromedriver_path(chromedriver_path) setting.set_comment_templates(comment_templates) setting.set_reply_comment(comment) setting.set_common_emojis(self.text_emojis.GetValue()) setting.set_like_conditions(self.text_like_conditions.GetValue()) show_info("保存成功") self.Bind(wx.EVT_CLOSE, self.OnFrameClose) self.btn_start_comment.Bind(wx.EVT_BUTTON, start_comment) self.btn_chrome_path.Bind(wx.EVT_BUTTON, on_select_chrome_file) self.btn_chromedriver_path.Bind(wx.EVT_BUTTON, on_select_chromdriver_file) self.btn_save.Bind(wx.EVT_BUTTON, on_save) def __init(self): self.comment_manager = None self.cb_like.SetValue(setting.is_click_like()) self.cb_comment.SetValue(setting.is_reply_comment()) self.text_comments.SetValue(setting.get_comment_templates()) self.text_chrome_path.SetValue(setting.get_chrome_path()) self.text_chromedriver_path.SetValue(setting.get_chromedriver_path()) self.text_emojis.SetValue(setting.get_common_emojis()) self.text_like_conditions.SetValue(setting.get_like_conditions()) def __create_setting_view(self, panel): def create_label(text): return wx.StaticText(panel, wx.ID_ANY, text, size=wx.Size(150, -1), style=wx.ALIGN_RIGHT) boxsier = wx.BoxSizer(wx.VERTICAL) # 浏览器地址 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("Chrome浏览器路径:"), 0, wx.ALIGN_CENTER_VERTICAL) self.text_chrome_path = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, -1)) ss.Add(self.text_chrome_path, 1, wx.RIGHT, 10) self.btn_chrome_path = wx.Button(panel, wx.ID_ANY, "选择文件") ss.Add(self.btn_chrome_path, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) # 浏览器驱动地址 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("Chrome浏览器驱动路径:"), 0, wx.ALIGN_CENTER_VERTICAL) self.text_chromedriver_path = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, -1)) ss.Add(self.text_chromedriver_path, 1, wx.RIGHT, 10) self.btn_chromedriver_path = wx.Button(panel, wx.ID_ANY, "选择文件") ss.Add(self.btn_chromedriver_path, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) # 是否点赞 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("是否点赞:"), 0, wx.ALIGN_CENTER_VERTICAL) self.cb_like = wx.CheckBox(panel, wx.ID_ANY, "") ss.Add(self.cb_like, 0, wx.ALIGN_CENTER_VERTICAL) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) # 是否评论 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("是否评论:"), 0, wx.ALIGN_CENTER_VERTICAL) self.cb_comment = wx.CheckBox(panel, wx.ID_ANY, "") ss.Add(self.cb_comment, 0, wx.ALIGN_CENTER_VERTICAL) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) # 常用表情 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("常用表情:"), 0) self.text_emojis = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, 50), style=wx.TE_MULTILINE) ss.Add(self.text_emojis, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) # 评论内容 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("评论模版:"), 0) self.text_comments = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, 150), style=wx.TE_MULTILINE) ss.Add(self.text_comments, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) boxsier.Add(wx.StaticText(panel, wx.ID_ANY, "模版与内容之间采用#分隔,如: 谢谢$#[昵称]不客气\n变量:【昵称】,【内容】,【最后一个表情】,【1-3】\n备注:$-结尾 ^-开始"), 0, wx.LEFT, 150) # 点赞条件 ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("点赞条件:"), 0) self.text_like_conditions = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, 80), style=wx.TE_MULTILINE) ss.Add(self.text_like_conditions, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) ss = wx.BoxSizer(wx.HORIZONTAL) self.btn_save = wx.Button(panel, wx.ID_ANY, "保存") ss.Add(self.btn_save, 0, wx.LEFT, 150) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) panel.SetSizer(boxsier) def __create_test_view(self, panel): def create_label(text): return wx.StaticText(panel, wx.ID_ANY, text, size=wx.Size(80, -1), style=wx.ALIGN_RIGHT) def on_excute(evt): # pattern = self.test_regex.GetValue().encode('unicode_escape').decode("utf-8") pattern = self.test_regex.GetValue() regex = re.compile(pattern) content = self.test_text.GetValue() result = regex.match(content) result_list=[] if result: result_list.append("是否匹配:匹配") else: result_list.append("是否匹配:不匹配") result = regex.findall(content) result_list.append("匹配内容:" + ",".join(result)) self.test_result.SetValue("\n".join(result_list)) boxsier = wx.BoxSizer(wx.VERTICAL) ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("正则表达式:"), 0, wx.ALIGN_CENTER_VERTICAL) self.test_regex = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, -1)) ss.Add(self.test_regex, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("内容:"), 0) self.test_text = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, 100),style=wx.TE_MULTILINE) ss.Add(self.test_text, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label("结果:"), 0) self.test_result = wx.TextCtrl(panel, wx.ID_ANY, size=wx.Size(-1, 100), style=wx.TE_READONLY|wx.TE_MULTILINE) ss.Add(self.test_result, 1, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) ss = wx.BoxSizer(wx.HORIZONTAL) ss.Add(create_label(""), 0, wx.ALIGN_CENTER_VERTICAL) self.test_excute = wx.Button(panel, wx.ID_ANY, "执行测试") ss.Add(self.test_excute, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) boxsier.Add(ss, 0, wx.EXPAND | wx.TOP, 10) self.test_excute.Bind(wx.EVT_BUTTON, on_excute) panel.SetSizer(boxsier) def __init__(self): wx.Frame.__init__(self, None, -1, "视频号助手", size=(900, 600)) self.SetBackgroundColour(wx.Colour(224, 224, 224)) root_sizer = wx.FlexGridSizer(2, 2, 10, 10) # ------设置页面------ panel_setting = wx.Panel(self, wx.ID_ANY, size=wx.Size(500, -1)) self.__create_setting_view(panel_setting) root_sizer.Add(panel_setting) # ------测试界面------ panel_test = wx.Panel(self, wx.ID_ANY, size=wx.Size(300, 400)) self.__create_test_view(panel_test) root_sizer.Add(panel_test) # ------执行页面------ panel_action = wx.Panel(self, wx.ID_ANY, size=wx.Size(500, 100)) self.btn_start_comment = wx.Button(panel_action, wx.ID_ANY, "开始") root_sizer.Add(panel_action) self.SetSizer(root_sizer) self.__init() self.__bind_event() def OnFrameClose(self, evt): print("页面关闭") if self.comment_manager: self.comment_manager.close() evt.Skip() class mainApp(wx.App): def __init_data(self): pass def OnInit(self): self.SetAppName("视频号助手") self.__init_data() MainFrame().Show() return True # cd D:\workspace\python\wechat_helper # D:\workspace\python\wechat_helper\venv\Scripts\pyinstaller.exe main.spec if __name__ == "__main__": app = mainApp() app.MainLoop()