Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3
- import wx
- import wx.lib.scrolledpanel
- import random
- import sys
- import os
- class MyFrame(wx.Frame):
- def __init__(self, parent, title):
- screenSize = wx.DisplaySize()
- screenWidth = screenSize[0]
- screenHeight = screenSize[1]
- self.wait = False
- super().__init__(
- parent, title =title, size=screenSize, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER
- )
- if not os.path.exists(self.path_file("inf.db")):
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- cursor.execute("CREATE TABLE chat (id INTEGER PRIMARY KEY, key TEXT, value TEXT)")
- conn.commit()
- cursor.close()
- self.chat_panel = wx.Panel(self, size=(500,screenHeight))
- self.vbox = wx.BoxSizer(wx.VERTICAL)
- self.chat = wx.TextCtrl(self.chat_panel, style=wx.TE_MULTILINE)
- self.send_btn = wx.Button(self.chat_panel, label="отправить")
- self.education_btn = wx.Button(self.chat_panel, label="обучение")
- self.answer = wx.StaticText(self.chat_panel, label="")
- self.vbox.Add(self.chat, flag=wx.ALL, border=10)
- self.vbox.Add(self.send_btn, flag=wx.ALL, border=10)
- self.vbox.Add(self.education_btn, flag=wx.ALL, border=10)
- self.vbox.Add(self.answer, flag=wx.ALL, border=10)
- self.send_btn.Bind(wx.EVT_BUTTON, self.choice_answer)
- self.education_btn.Bind(wx.EVT_BUTTON, self.show_education)
- self.chat_panel.SetSizer(self.vbox)
- self.vbox.Fit(self)
- self.item_panel = wx.lib.scrolledpanel.ScrolledPanel(self, size=(700,screenHeight))
- self.item_panel.SetupScrolling()
- self.item_panel.Hide()
- self.item_vbox = wx.BoxSizer(wx.VERTICAL)
- self.chat_btn = wx.Button(self.item_panel, label="чат")
- new_item_btn = wx.Button(self.item_panel, label="добавить")
- self.item_vbox.Add(self.chat_btn, flag=wx.ALL, border=10)
- self.item_vbox.Add(new_item_btn, flag=wx.ALL, border=10)
- new_item_btn.Bind(wx.EVT_BUTTON, self.new_item)
- self.chat_btn.Bind(wx.EVT_BUTTON, self.show_chat)
- self.update_items()
- self.item_panel.SetSizer(self.item_vbox)
- self.item_vbox.Fit(self)
- self.main_sizer = wx.BoxSizer(wx.VERTICAL)
- self.main_sizer.Add(self.chat_panel, 1, wx.EXPAND, 0)
- self.main_sizer.Add(self.item_panel, 1, wx.EXPAND, 0)
- self.SetSizer(self.main_sizer)
- self.main_sizer.Fit(self)
- self.Layout()
- self.Centre()
- def show_chat(self, e):
- self.item_panel.Hide()
- self.chat_panel.Show()
- self.chat.SetFocus()
- self.main_sizer.Fit(self)
- def show_education(self, e):
- self.wait = False
- self.answer.SetLabel("")
- self.chat_panel.Hide()
- self.item_panel.Show()
- self.chat_btn.SetFocus()
- self.main_sizer.Fit(self)
- def remove(self, e):
- row_id = e.EventObject.GetId()
- remove_dlg = wx.MessageDialog(
- self,
- "удалить эту фразу?",
- "удаление",
- wx.YES_NO | wx.ICON_QUESTION
- )
- answer = remove_dlg.ShowModal()
- if answer == wx.ID_YES:
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- cursor.execute("DELETE FROM chat WHERE id=?", (row_id,))
- conn.commit()
- cursor.close()
- conn.close()
- e.EventObject.Destroy()
- def new_item(self, e):
- new_item_dlg = wx.TextEntryDialog(
- self,
- message="напиши фразу и ответ через дефис",
- caption="добавить",
- style=wx.OK
- )
- new_item_dlg.ShowModal()
- value = new_item_dlg.GetValue()
- value = value.split("-")
- # убираем пробелы по краям
- value = list(map(lambda x: x.strip(), value))
- try:
- item = (value[0], value[1])
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- cursor.execute("INSERT INTO chat (key, value) VALUES (?, ?)", item)
- conn.commit()
- cursor.close()
- except IndexError:
- return
- self.update_items()
- def update_items(self):
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- result = cursor.execute("SELECT id, key, value FROM chat")
- rows = cursor.fetchall()
- for row in rows:
- id, key, value = row
- item_btn = wx.Button(self.item_panel, id=id, label=f"фраза: {key}, ответ: {value}")
- self.item_vbox.Add(item_btn, flag=0, border=10)
- item_btn.Bind(wx.EVT_BUTTON, self.remove)
- self.item_vbox.Fit(self)
- self.Layout()
- cursor.close()
- conn.close()
- def path_file(self, file_name):
- if getattr(sys, 'frozen', False):
- return os.path.join(sys._MEIPASS, file_name)
- else:
- return file_name
- def choice_answer(self, e):
- self.text = self.chat.GetValue().strip() # убираем пробелы по краям
- self.chat.SetValue("")
- if self.wait == False:
- self.show_answer()
- else:
- self.add_answer()
- self.wait = False
- self.vbox.Fit(self.answer)
- self.answer.SetFocus()
- def add_answer(self):
- save_answers = ["спасибо, я узнала", "спасибо, я поняла", "спасибо, всё понятно", "постараюсь это запомнить", "ок"]
- item = (self.question, self.text)
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- cursor.execute("INSERT INTO chat (key, value) VALUES (?, ?)", item)
- conn.commit()
- last_id = cursor.lastrowid
- cursor.close()
- self.answer.SetLabel(random.choice(save_answers))
- id, key, value = (last_id, item[0], item[1])
- item_btn = wx.Button(self.item_panel, id=id, label=f"фраза: {key}, ответ: {value}")
- self.item_vbox.Add(item_btn, flag=0, border=10)
- item_btn.Bind(wx.EVT_BUTTON, self.remove)
- self.vbox.Fit(self.answer)
- def show_answer(self):
- wait_answer = ["что я должна ответить", "что мне надо на это ответить", "что я должна сказать"]
- conn = sqlite3.connect(self.path_file("inf.db"))
- cursor = conn.cursor()
- result = cursor.execute("SELECT value FROM chat WHERE key LIKE ?", ("%"+self.text+"%",))
- values = result.fetchall()
- if not values:
- self.answer.SetLabel(random.choice(wait_answer))
- self.vbox.Fit(self.answer)
- self.wait = True
- else:
- self.answer.SetLabel(random.choice(values)[0])
- self.vbox.Fit(self.answer)
- self.question = self.text
- conn.commit()
- cursor.close()
- if __name__ == '__main__':
- app = wx.App()
- frame = MyFrame(None, "test")
- frame.Show()
- app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment