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()
|