无法通过函数创建窗口
This commit is contained in:
parent
a8206726bf
commit
3a72f45677
2
python/test/1000/Account.csv
Normal file
2
python/test/1000/Account.csv
Normal file
@ -0,0 +1,2 @@
|
||||
Id,Password,NetName,UpDataTime
|
||||
1000,1,aw,2024-04-18 23:22:44
|
|
5
python/test/1000/Contacts.csv
Normal file
5
python/test/1000/Contacts.csv
Normal file
@ -0,0 +1,5 @@
|
||||
Contact,Remark,State,UpDataTime
|
||||
1001,HJads,True,2024-04-18 23:22:44
|
||||
1002,lsy,True,2024-04-18 23:22:44
|
||||
1003,sx,True,2024-04-18 23:22:44
|
||||
1004,不啊,True,2024-04-18 23:22:44
|
|
3
python/test/1000/History.csv
Normal file
3
python/test/1000/History.csv
Normal file
@ -0,0 +1,3 @@
|
||||
Send,Receive,Type,Content,Time
|
||||
1000,1001,text,你好1,2024-04-18 23:22:44
|
||||
1000,1001,text,你好3,2024-04-18 23:22:44
|
|
@ -1,3 +1,4 @@
|
||||
import os
|
||||
import wx
|
||||
import wx.aui
|
||||
import wx.lib.scrolledpanel as scrolled
|
||||
@ -11,6 +12,10 @@ class ChatFrame(wx.Frame, ProcessClient):
|
||||
wx.Frame.__init__(self, None, size=(800, 600), title="账号: " + str(Id))
|
||||
ProcessClient.__init__(self)
|
||||
|
||||
current_file_path = __file__
|
||||
current_file_name = os.path.basename(current_file_path).split('.')[0]
|
||||
self.Process_client_send("Server", "Name", current_file_name)
|
||||
|
||||
ChatMain_Panel = wx.Panel(self, style=wx.BORDER_SUNKEN)
|
||||
ChatMain_box = wx.BoxSizer(wx.HORIZONTAL)
|
||||
ChatMain_Panel.SetSizer(ChatMain_box)
|
||||
@ -82,6 +87,8 @@ class ChatFrame(wx.Frame, ProcessClient):
|
||||
|
||||
ChatMain_Panel.SetSizer(ChatMain_box)
|
||||
|
||||
self.chat_page.ChatPage_add_Contact_person(999, 'Remark', 'Time')
|
||||
|
||||
def click_chat_button(self, event):
|
||||
self.chat_page.Hide()
|
||||
self.connect_page.Hide()
|
||||
@ -114,6 +121,20 @@ class ChatFrame(wx.Frame, ProcessClient):
|
||||
self.find_page.Show()
|
||||
self.Layout()
|
||||
|
||||
def Process_client_pick(self, data):
|
||||
if data['target'] in ['ALL', 'Chat_main']:
|
||||
match data['function']:
|
||||
case 'ChatPage_add_Contact_person':
|
||||
data = data['content']
|
||||
Contact = eval(data['Contact'])
|
||||
Remark = data['Remark']
|
||||
Time = data['UpDataTime']
|
||||
self.chat_page.ChatPage_add_Contact_person(Contact, Remark, Time)
|
||||
self.Layout()
|
||||
case 'ChatPage_add_Contact_tab':
|
||||
# self.ChatPage.ChatPage_add_Contact_tab('Id', 'Remark','Remark')
|
||||
print(data)
|
||||
|
||||
class ChatPage(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent, style=wx.BORDER_SUNKEN)
|
||||
@ -133,28 +154,18 @@ class ChatFrame(wx.Frame, ProcessClient):
|
||||
|
||||
self.SetSizer(ChatPage_main_box)
|
||||
|
||||
def ChatPage_add_Contact_person(self, Id, Remark, info):
|
||||
def ChatPage_add_Contact_person(self, Id, Remark, Time):
|
||||
ChatPage_add_Contact_person_box = wx.BoxSizer(wx.VERTICAL)
|
||||
|
||||
ChatPage_add_Contact_person_top_box = wx.BoxSizer(wx.HORIZONTAL)
|
||||
if len(Remark) > 6:
|
||||
Remark = Remark[:6] + "..."
|
||||
else:
|
||||
Remark += ''.join([" " for i in range(max(0, 9 - len(Remark)))])
|
||||
ChatPage_add_Contact_person_NetName = wx.StaticText(self.ChatPage_Contact_person_panel, -1, Remark)
|
||||
ChatPage_add_Contact_person_top_box.Add(ChatPage_add_Contact_person_NetName, 0, wx.ALIGN_LEFT, 0)
|
||||
ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_NetName, 0, wx.ALIGN_LEFT, 0)
|
||||
|
||||
ChatPage_add_Contact_person_top_box.AddSpacer(20)
|
||||
|
||||
ChatPage_add_Contact_person_date = wx.StaticText(self.ChatPage_Contact_person_panel, -1,
|
||||
time.strftime("%Y/%m/%d", time.localtime()))
|
||||
ChatPage_add_Contact_person_top_box.Add(ChatPage_add_Contact_person_date, 0, wx.ALIGN_CENTER_VERTICAL, 0)
|
||||
ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_top_box, 0, wx.EXPAND, 0)
|
||||
|
||||
if len(info) > 10:
|
||||
info = info[:10] + "..."
|
||||
ChatPage_add_Contact_person_info = wx.StaticText(self.ChatPage_Contact_person_panel, -1, info)
|
||||
ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_info, 0, wx.ALIGN_LEFT, 0)
|
||||
ChatPage_add_Contact_person_date = wx.StaticText(self.ChatPage_Contact_person_panel, -1, Time)
|
||||
ChatPage_add_Contact_person_box.Add(ChatPage_add_Contact_person_date, 0, wx.EXPAND, 0)
|
||||
|
||||
self.ChatPage_Contact_person_panel.GetSizer().Add(ChatPage_add_Contact_person_box, 0, wx.ALL, 5)
|
||||
self.ChatPage_Contact_person_panel.Layout()
|
||||
|
@ -109,8 +109,9 @@ class LoginFrame(wx.Frame, ProcessClient):
|
||||
if receive_content["genre"] == '登录':
|
||||
match receive_content["data"]['status']:
|
||||
case 0:
|
||||
self.Destroy()
|
||||
self.Process_client_send("file_operate", "detection_data", receive_content["data"]['account'])
|
||||
multiprocessing.Process(target=open_chat_window, args=(receive_content["data"]['account'],)).start()
|
||||
self.Destroy()
|
||||
case -1:
|
||||
wx.MessageBox('重复登录', '登录', wx.OK | wx.ICON_INFORMATION)
|
||||
case 1:
|
||||
|
@ -48,7 +48,7 @@ class Session_server(ProcessClient):
|
||||
receive_content = json.loads(receive_content_json)
|
||||
self.content_pick(receive_content)
|
||||
except Exception as a:
|
||||
print("接收错误:" + str(a))
|
||||
print("客户端接收错误:" + str(a))
|
||||
self.server_status = False
|
||||
self.Process_client_send("ALL", "server_status", self.server_status)
|
||||
|
||||
@ -57,7 +57,7 @@ class Session_server(ProcessClient):
|
||||
try:
|
||||
data = {"genre": genre, "target": target, "data": content,
|
||||
"datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}
|
||||
data_json = json.dumps(data)
|
||||
data_json = json.dumps(data)+'\n'
|
||||
self.server_socket.send(data_json.encode("utf-8"))
|
||||
except Exception as a:
|
||||
print("发送错误:" + str(a))
|
||||
@ -77,7 +77,6 @@ class Session_server(ProcessClient):
|
||||
case '注册' | '登录':
|
||||
self.Process_client_send("Login", "login_page_receive", data)
|
||||
case '数据更新':
|
||||
print(data)
|
||||
self.Process_client_send("file_operate", "login_page_receive", data)
|
||||
self.Process_client_send("file_operate", "save_data", data['data'])
|
||||
|
||||
|
||||
|
@ -1,42 +1,93 @@
|
||||
import os
|
||||
import csv
|
||||
import time
|
||||
|
||||
from .Process_Client import ProcessClient
|
||||
|
||||
|
||||
class FileOperate(ProcessClient):
|
||||
def __init__(self):
|
||||
def __init__(self, user_id):
|
||||
ProcessClient.__init__(self)
|
||||
|
||||
self.user_id = user_id
|
||||
|
||||
self.root_path = None
|
||||
self.Account_path = None
|
||||
self.Contacts_path = None
|
||||
self.History_path = None
|
||||
self.file_root_path = None
|
||||
self.other_file_path = None
|
||||
self.image_file_path = None
|
||||
|
||||
current_file_path = __file__
|
||||
current_file_name = os.path.basename(current_file_path).split('.')[0]
|
||||
self.Process_client_send("Server", "Name", current_file_name)
|
||||
|
||||
def detection_data(self, Id):
|
||||
root_path = rf'.\{Id}'
|
||||
info_path = root_path + r'\info.csv'
|
||||
file_root_path = root_path + r'\file'
|
||||
other_file_path = file_root_path + r'\other'
|
||||
image_file_path = file_root_path + r'\image'
|
||||
if not os.path.isdir(root_path):
|
||||
os.mkdir(root_path)
|
||||
if not os.path.isdir(file_root_path):
|
||||
os.mkdir(file_root_path)
|
||||
os.mkdir(other_file_path)
|
||||
os.mkdir(image_file_path)
|
||||
if not os.path.exists(info_path):
|
||||
with open(info_path, 'w', encoding='utf-8') as f:
|
||||
self.user_id = Id
|
||||
self.root_path = rf'.\{Id}'
|
||||
self.Account_path = self.root_path + r'\Account.csv'
|
||||
self.Contacts_path = self.root_path + r'\Contacts.csv'
|
||||
self.History_path = self.root_path + r'\History.csv'
|
||||
self.file_root_path = self.root_path + r'\file'
|
||||
self.other_file_path = self.file_root_path + r'\other'
|
||||
self.image_file_path = self.file_root_path + r'\image'
|
||||
if not os.path.isdir(self.root_path):
|
||||
os.mkdir(self.root_path)
|
||||
if not os.path.isdir(self.file_root_path):
|
||||
os.mkdir(self.file_root_path)
|
||||
os.mkdir(self.other_file_path)
|
||||
os.mkdir(self.image_file_path)
|
||||
if not os.path.exists(self.Account_path):
|
||||
with open(self.Account_path, 'w', encoding='utf-8') as f:
|
||||
pass
|
||||
with open(info_path, 'r+', encoding='utf-8') as info:
|
||||
if info.tell() == 0:
|
||||
date = None
|
||||
with open(self.Account_path, 'r+', encoding='utf-8') as info:
|
||||
data = csv.DictReader(info)
|
||||
if os.path.getsize(self.Account_path) == 0: # 检查文件大小是否为0
|
||||
date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(0))
|
||||
else:
|
||||
for d in data:
|
||||
date = d['UpDataTime']
|
||||
|
||||
target = "服务器"
|
||||
genre = "数据更新"
|
||||
content = date
|
||||
data = {"genre": genre, "target": target, "content": content}
|
||||
data = {"genre": genre, "target": target, "content": date}
|
||||
self.Process_client_send("Session_server", "send_server", data)
|
||||
|
||||
time.sleep(1)
|
||||
with open(self.Contacts_path, 'r', encoding='utf-8') as file:
|
||||
data = csv.DictReader(file)
|
||||
for row in data:
|
||||
self.Process_client_send("Chat_main", "ChatPage_add_Contact_person", row)
|
||||
|
||||
|
||||
|
||||
def save_data(self, data):
|
||||
target = list(data.keys())[0]
|
||||
data = list(data.values())[0]
|
||||
match target:
|
||||
case 'Account':
|
||||
with open(self.Account_path, 'w+', encoding='utf-8', newline='') as file:
|
||||
csv_file = csv.writer(file)
|
||||
csv_file.writerow(list(data.keys()))
|
||||
csv_file.writerow(list(data.values()))
|
||||
case 'Contacts':
|
||||
with open(self.Contacts_path, 'a+', encoding='utf-8', newline='') as file:
|
||||
csv_file = csv.writer(file)
|
||||
if os.path.getsize(self.Contacts_path) == 0: # 检查文件大小是否为0
|
||||
csv_file.writerow(list(data.keys()))
|
||||
csv_file.writerow(list(data.values()))
|
||||
case 'History':
|
||||
with open(self.History_path, 'a+', encoding='utf-8', newline='') as file:
|
||||
csv_file = csv.writer(file)
|
||||
if os.path.getsize(self.History_path) == 0: # 检查文件大小是否为0
|
||||
csv_file.writerow(list(data.keys()))
|
||||
csv_file.writerow(list(data.values()))
|
||||
|
||||
def Process_client_pick(self, data):
|
||||
if data['target'] in ['ALL', 'file_operate']:
|
||||
print(data)
|
||||
#match data['function']:
|
||||
match data['function']:
|
||||
case 'detection_data':
|
||||
self.detection_data(data['content'])
|
||||
case 'save_data':
|
||||
self.save_data(data['content'])
|
||||
|
@ -4,10 +4,12 @@ from .Transmission import *
|
||||
|
||||
class start_all:
|
||||
def __init__(self):
|
||||
|
||||
ProcessServer()
|
||||
|
||||
Session_server()
|
||||
|
||||
FileOperate(None)
|
||||
|
||||
app = wx.App()
|
||||
LoginFrame().Show()
|
||||
app.MainLoop()
|
||||
|
@ -94,37 +94,48 @@ class database(ProcessClient):
|
||||
print(a)
|
||||
|
||||
def detection_data(self, Id, date):
|
||||
if date is None:
|
||||
datas = []
|
||||
datas = []
|
||||
|
||||
self.database_cursor.execute(f"select Id,Password,NetName,UpDataTime from Account where Id = {Id}")
|
||||
Account_database = self.database_cursor.fetchall()
|
||||
Account_content = {'Id': Account_database[0][0],
|
||||
'Password': Account_database[0][1],
|
||||
'NetName': Account_database[0][2],
|
||||
'UpDataTime': Account_database[0][3].strftime('%Y-%m-%d %H:%M:%S')}
|
||||
Account_data = {"Account": Account_content}
|
||||
datas.append(Account_data)
|
||||
self.database_cursor.execute(f"select Id,Password,NetName,UpDataTime from Account where Id = {Id}")
|
||||
Account_database = self.database_cursor.fetchall()
|
||||
Account_content = {'Id': Account_database[0][0],
|
||||
'Password': Account_database[0][1],
|
||||
'NetName': Account_database[0][2],
|
||||
'UpDataTime': Account_database[0][3].strftime('%Y-%m-%d %H:%M:%S')}
|
||||
if Account_content['UpDataTime'] == date:
|
||||
return
|
||||
|
||||
self.database_cursor.execute(f"select ContactsId,Remark,State from Contacts where UserId = {Id}")
|
||||
Contacts_database = self.database_cursor.fetchall()
|
||||
Contacts_data = {"Contacts": Contacts_database}
|
||||
Account_data = {"Account": Account_content}
|
||||
datas.append(Account_data)
|
||||
|
||||
self.database_cursor.execute(
|
||||
f"select ContactsId,Remark,State,UpDataTime from Contacts where UserId = {Id} and UpDataTime > '{date}'")
|
||||
Contacts_database = self.database_cursor.fetchall()
|
||||
for Contact in Contacts_database:
|
||||
Contacts_content = {'Contact': Contact[0],
|
||||
'Remark': Contact[1],
|
||||
'State': Contact[2],
|
||||
'UpDataTime': Contact[3].strftime('%Y-%m-%d %H:%M:%S')}
|
||||
Contacts_data = {"Contacts": Contacts_content}
|
||||
datas.append(Contacts_data)
|
||||
|
||||
self.database_cursor.execute(f"select ContactsId,Remark,State from Contacts where UserId = {Id}")
|
||||
Contacts_database = self.database_cursor.fetchall()
|
||||
Contacts_data = {"Contacts": Contacts_database}
|
||||
datas.append(Contacts_data)
|
||||
|
||||
self.database_cursor.execute(f"select * from History where Send = {Id} or Receive ={Id}")
|
||||
History_database = self.database_cursor.fetchall()
|
||||
History_data = {"History": History_database}
|
||||
self.database_cursor.execute(f"select * from History where Send = {Id} or Receive = {Id} and Time > '{date}'")
|
||||
History_database = self.database_cursor.fetchall()
|
||||
for History in History_database:
|
||||
content = {
|
||||
'Send': History[0],
|
||||
'Receive': History[1],
|
||||
'Type': History[2],
|
||||
'Content': History[3],
|
||||
'Time': History[4].strftime('%Y-%m-%d %H:%M:%S')}
|
||||
History_data = {"History": content}
|
||||
datas.append(History_data)
|
||||
for data in datas:
|
||||
content = {"client_id": Id, "target": "客户端", "genre": "数据更新", "data": data}
|
||||
self.Process_client_send('Session_client', 'send_client', content)
|
||||
|
||||
|
||||
for data in datas:
|
||||
time.sleep(0.1)
|
||||
content = {"client_id": Id, "target": "客户端", "genre": "数据更新", "data": data}
|
||||
self.Process_client_send('Session_client', 'send_client', content)
|
||||
|
||||
def Process_client_pick(self, data):
|
||||
if data['target'] in ['ALL', 'Database_formula']:
|
||||
|
@ -43,7 +43,7 @@ class link_client(ProcessClient):
|
||||
try:
|
||||
data = {"genre": genre, "target": target, "data": content,
|
||||
"datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}
|
||||
data_json = json.dumps(data)
|
||||
data_json = json.dumps(data)+'\n'
|
||||
client_socket.send(data_json.encode("utf-8"))
|
||||
except:
|
||||
client_socket.close()
|
||||
|
@ -1,54 +1,5 @@
|
||||
import json
|
||||
import multiprocessing
|
||||
from multiprocessing.connection import Listener
|
||||
import threading
|
||||
import time
|
||||
|
||||
|
||||
class ProcessServer:
|
||||
def __init__(self):
|
||||
try:
|
||||
self.Process_port = 3244
|
||||
self.Process_server = 'localhost'
|
||||
self.Process_server_listener = Listener((self.Process_server, self.Process_port))
|
||||
self.Process_client_link_dick = {}
|
||||
Process_client_link_Thread = threading.Thread(target=self.Process_client_link)
|
||||
Process_client_link_Thread.start()
|
||||
except:
|
||||
print("进程通信端口绑定失败")
|
||||
|
||||
|
||||
def Process_client_link(self):
|
||||
while True:
|
||||
client_connect = self.Process_server_listener.accept()
|
||||
client_Thread_recv = threading.Thread(target=self.Process_client_recv, args=(client_connect,))
|
||||
client_Thread_recv.start()
|
||||
|
||||
def Process_client_recv(self, client_Thread_recv):
|
||||
while True:
|
||||
data_json = client_Thread_recv.recv()
|
||||
data = json.loads(data_json)
|
||||
if data['target'] == 'Server':
|
||||
if data['function'] == 'Name':
|
||||
self.Process_client_link_dick[data['content']] = client_Thread_recv
|
||||
else:
|
||||
self.Process_client_pick(data)
|
||||
|
||||
def Process_client_send(self, target, function, content):
|
||||
connect = self.Process_client_link_dick[target]
|
||||
data = {"target": target, "function": function, "content": content}
|
||||
data_json = json.dumps(data)
|
||||
connect.send(data_json)
|
||||
|
||||
def Process_client_pick(self, data):
|
||||
if data['target'] == 'ALL':
|
||||
for value in self.Process_client_link_dick.values():
|
||||
data_json = json.dumps(data)
|
||||
value.send(data_json)
|
||||
else:
|
||||
if data['target'] in self.Process_client_link_dick.keys():
|
||||
data_json = json.dumps(data)
|
||||
self.Process_client_link_dick[data['target']].send(data_json)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
ProcessServer()
|
||||
date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(0))
|
||||
print(type(date))
|
Loading…
Reference in New Issue
Block a user