Browse Source

finished the login page

dev
qiancj 9 months ago
parent
commit
8e1797a9bc
  1. 282
      frontend/static_pages/login_page.py

282
frontend/static_pages/login_page.py

@ -1,10 +1,14 @@
# -*- coding: utf-8 -*-
import time
from threading import Thread
import requests
import wx
from frontend.components_lib import (
Frame, Panel, LayoutParams, FontSize, InputLabel
)
from frontend.components_lib.comp_libs import PhoneVerifyCodeComponent
class LoginBody(Panel):
@ -12,8 +16,9 @@ class LoginBody(Panel):
Panel.__init__(self, parent, _id, pos, size, style, page_title)
self.drop_list = None
self.username = None
self.pwd = None
self.notebook = None
self.phone_page = None
self.acc_page = None
# 调用初始化 hook
self._OnInit()
@ -32,7 +37,7 @@ class LoginBody(Panel):
), 0, wx.ALIGN_CENTER_HORIZONTAL, 5
)
# 创建 content 部分的组件并添加到 body sizer 中
# self.body_sizer.Add(self.content_components(), 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
self.body_sizer.Add(self.content_components(), 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
# 创建底部按钮组件并添加到 body sizer 中
self.body_sizer.Add(
self.button_components(
@ -50,13 +55,13 @@ class LoginBody(Panel):
self.notebook.SetBackgroundColour(wx.Colour(255, 255, 255))
# 创建数据导入页
self.imp_page = PhonePage(self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
self.phone_page = PhonePage(self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
# 创建导入记录页
self.rec_page = RecordPage(self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
self.acc_page = AccountPage(self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
# 将两页添加到 notebook 中,默认选中 批量导入 页签
self.notebook.AddPage(self.imp_page, "批量导入", True)
self.notebook.AddPage(self.rec_page, "导入记", False)
self.notebook.AddPage(self.phone_page, "手机验证码登录", True)
self.notebook.AddPage(self.acc_page, "用户名密码登", False)
# 将 notebook 组件添加到 content sizer 中
content_sizer.Add(self.notebook, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5)
@ -72,7 +77,7 @@ class PhonePage(Panel):
self.code_val = None
self.get_code_btn = None
self.SetFont(wx.Font(**FontSize.CONTENT_SIZE))
self.SetMaxSize(wx.Size(400, 115))
self.SetMaxSize(wx.Size(400, 90))
# 调用初始化 hook
self._OnInit()
@ -86,7 +91,7 @@ class PhonePage(Panel):
# 创建页面 sizer
self.page_sizer = wx.BoxSizer(wx.VERTICAL)
# 配置大小
self.page_sizer.SetMinSize(wx.Size(400, 115))
self.page_sizer.SetMinSize(wx.Size(400, 90))
# 获取 content 部分并添加到页面 sizer 中
self.page_sizer.Add(self.content_components(), 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
# 设置sizer
@ -99,25 +104,65 @@ class PhonePage(Panel):
# 创建文件选择器组件的 sizer
comp_sizer = self.flex_sizer_generater(2, 3, 0, 0)
# 创建文件选择器组件
user = (_, _, (self.phone, *_)) = InputLabel(
phone_grp = (_, _, (self.phone, *_)) = InputLabel(
self,
{"id": wx.ID_ANY, "label": "手 机", "pos": wx.DefaultPosition, "size": wx.DefaultSize, "style": 0},
(5, 0),
{"id": wx.ID_ANY, "pos": wx.DefaultPosition, "size": wx.Size(260, -1), "style": 0, "value": ""},
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT
).get_item
code = (_, _, ((self.code_val, *_), _, (self.get_code_btn, *_))) = 0
# 创建手机验证码获取与输入组件
*code_sizer, self.code_val, self.get_code_btn = PhoneVerifyCodeComponent(
self,
{"id": wx.ID_ANY, "label": "验证码", "pos": wx.DefaultPosition, "size": wx.DefaultSize, "style": 0},
(5, 0), self.flex_sizer_generater(1, 2, 0, 0),
{"label_size": (110, -1), "btn_name": "获取手机验证码"}, FontSize.CONTENT_SIZE
).get_item
# 将文件选择器组件添加到 sizer 中
comp_sizer.AddMany(user)
comp_sizer.AddMany((*phone_grp, *code_sizer))
return comp_sizer
class AccountPage(PhonePage):
def __init__(self, parent, _id, pos, size, style):
Panel.__init__(self, parent, _id, pos, size, style)
self.username = None
self.pwd = None
self.SetFont(wx.Font(**FontSize.CONTENT_SIZE))
self.SetMaxSize(wx.Size(400, 90))
# 调用初始化 hook
self._OnInit()
def content_components(self):
comp_sizer = self.flex_sizer_generater(2, 3, 0, 0)
# 创建并配置用户名输入组件
user_grp = (_, _, (self.username, *_)) = InputLabel(
self,
{"id": wx.ID_ANY, "label": "用户姓名", "pos": wx.DefaultPosition, "size": wx.DefaultSize, "style": 0},
(5, 0),
{"id": wx.ID_ANY, "pos": wx.DefaultPosition, "size": wx.Size(260, -1), "style": 0, "value": ""},
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT
).get_item
# 创建并配置密码输入组件
pwd_grp = (_, _, (self.pwd, *_)) = InputLabel(
self,
{"id": wx.ID_ANY, "label": "密 码", "pos": wx.DefaultPosition, "size": wx.DefaultSize, "style": 0},
(5, 0),
{
"id": wx.ID_ANY, "pos": wx.DefaultPosition, "size": wx.Size(260, -1), "style": wx.TE_PASSWORD,
"value": ""
},
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT
).get_item
comp_sizer.AddMany((*user_grp, *pwd_grp))
return comp_sizer
class LoginPage(Frame):
def __init__(self, parent, title, size, page_title):
Frame.__init__(self, parent, title=title, size=size, page_title=page_title)
# self.__size = size
# # 调用 hook
# self.show()
def get_body(self, parent, _id, pos, size, style):
"""
@ -143,9 +188,9 @@ class LoginPage(Frame):
self._body.exit_btn.Bind(wx.EVT_LEFT_UP, self.on_exit_click)
self._body.submit_btn.Bind(wx.EVT_LEFT_UP, self.on_sumbit_click)
# 绑定获取手机验证码事件
# self._body.get_code_btn.Bind(wx.EVT_LEFT_UP, self.on_get_code_click)
self._body.phone_page.get_code_btn.Bind(wx.EVT_LEFT_UP, self.on_get_code_click)
# 给密码输入框绑定回车事件
# self._body.pwd.Bind(wx.EVT_KEY_UP, self.on_enter_up)
self._body.acc_page.pwd.Bind(wx.EVT_KEY_UP, self.on_enter_up)
def on_exit_click(self, event):
self.Destroy()
@ -161,198 +206,31 @@ class LoginPage(Frame):
self.on_sumbit_click(None)
def on_get_code_click(self, event):
pass
class LoginPage1(wx.Frame):
def __init__(self, parent):
"""
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
self.SetFont(wx.Font(24, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
self.SetBackgroundColour(wx.Colour(255, 255, 255))
page_sizer = wx.BoxSizer(wx.VERTICAL)
"""
self.body = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
body_sizer = wx.BoxSizer(wx.VERTICAL)
title_sizer = wx.FlexGridSizer(0, 1, 0, 0)
title_sizer.SetFlexibleDirection(wx.BOTH)
title_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
title_sizer.Add((0, 15), 1, wx.EXPAND, 5)
self.m_staticText1 = wx.StaticText(self.body, wx.ID_ANY, u"登 录", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText1.Wrap(-1)
self.m_staticText1.SetFont(
wx.Font(24, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
title_sizer.Add(self.m_staticText1, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
title_sizer.Add((0, 15), 1, wx.EXPAND, 5)
body_sizer.Add(title_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
content_sizer = wx.FlexGridSizer(0, 1, 0, 0)
content_sizer.SetFlexibleDirection(wx.BOTH)
content_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.m_notebook1 = wx.Notebook(self.body, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
self.m_notebook1.SetFont(
wx.Font(11, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
self.phone_page = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
self.phone_page.SetFont(
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
phone_sizer = wx.BoxSizer(wx.VERTICAL)
phone_code_sizer = wx.FlexGridSizer(0, 3, 0, 0)
phone_code_sizer.SetFlexibleDirection(wx.BOTH)
phone_code_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.phone = wx.StaticText(self.phone_page, wx.ID_ANY, u"手 机", wx.DefaultPosition, wx.DefaultSize, 0)
self.phone.Wrap(-1)
t0 = Thread(target=self.get_code)
t0.daemon = True
t0.start()
i = 60
t1 = Thread(target=self.c_clock, args=(i,))
t1.daemon = True
t1.start()
phone_code_sizer.Add(self.phone, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
def c_clock(self, t):
self._body.phone_page.get_code_btn.Disable()
while t > 0:
self._body.phone_page.get_code_btn.SetLabel(f"{t}s 后重新获取")
time.sleep(1)
t -= 1
self._body.phone_page.get_code_btn.SetLabel("获取手机验证码")
self._body.phone_page.get_code_btn.Enable()
phone_code_sizer.Add((0, 10), 1, wx.EXPAND, 5)
self.phonr_num = wx.TextCtrl(self.phone_page, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(260, -1),
0)
phone_code_sizer.Add(self.phonr_num, 0, wx.ALL, 5)
self.code = wx.StaticText(self.phone_page, wx.ID_ANY, u"验证码", wx.DefaultPosition, wx.DefaultSize, 0)
self.code.Wrap(-1)
phone_code_sizer.Add(self.code, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
phone_code_sizer.Add((0, 0), 1, wx.EXPAND, 5)
get_code_sizer = wx.FlexGridSizer(0, 2, 0, 0)
get_code_sizer.SetFlexibleDirection(wx.BOTH)
get_code_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.phone_code = wx.TextCtrl(self.phone_page, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
get_code_sizer.Add(self.phone_code, 0, wx.ALL, 5)
self.get_code = wx.Button(self.phone_page, wx.ID_ANY, u" 获取手机验证码 ", wx.DefaultPosition, wx.DefaultSize, 0)
self.get_code.SetFont(
wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "宋体"))
get_code_sizer.Add(self.get_code, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
phone_code_sizer.Add(get_code_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
phone_sizer.Add(phone_code_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
self.phone_page.SetSizer(phone_sizer)
self.phone_page.Layout()
phone_sizer.Fit(self.phone_page)
self.m_notebook1.AddPage(self.phone_page, u"手机验证码登录", True)
self.account_page = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
self.account_page.SetFont(
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
account_sizer = wx.BoxSizer(wx.VERTICAL)
account_pwd_sizer = wx.FlexGridSizer(0, 3, 0, 0)
account_pwd_sizer.SetFlexibleDirection(wx.BOTH)
account_pwd_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.username = wx.StaticText(self.account_page, wx.ID_ANY, u"用户名", wx.DefaultPosition, wx.DefaultSize, 0)
self.username.Wrap(-1)
account_pwd_sizer.Add(self.username, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
account_pwd_sizer.Add((10, 0), 1, wx.EXPAND, 5)
self.username_val = wx.TextCtrl(self.account_page, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition,
wx.Size(260, -1), 0)
account_pwd_sizer.Add(self.username_val, 0, wx.ALL, 5)
self.password = wx.StaticText(self.account_page, wx.ID_ANY, u"密 码", wx.DefaultPosition, wx.DefaultSize, 0)
self.password.Wrap(-1)
account_pwd_sizer.Add(self.password, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
account_pwd_sizer.Add((10, 0), 1, wx.EXPAND, 5)
self.m_textCtrl5 = wx.TextCtrl(self.account_page, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition,
wx.Size(260, -1), wx.TE_PASSWORD)
account_pwd_sizer.Add(self.m_textCtrl5, 0, wx.ALL, 5)
account_sizer.Add(account_pwd_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
self.account_page.SetSizer(account_sizer)
self.account_page.Layout()
account_sizer.Fit(self.account_page)
self.m_notebook1.AddPage(self.account_page, u"用户名密码登录", False)
content_sizer.Add(self.m_notebook1, 1, wx.EXPAND | wx.ALL, 5)
content_sizer.Add((0, 15), 1, wx.EXPAND, 5)
body_sizer.Add(content_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
btn_sizer = wx.FlexGridSizer(0, 3, 0, 0)
btn_sizer.SetFlexibleDirection(wx.BOTH)
btn_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.exit_btn = wx.Button(self.body, wx.ID_ANY, u"退出", wx.DefaultPosition, wx.DefaultSize, 0)
self.exit_btn.SetFont(wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
btn_sizer.Add(self.exit_btn, 0, wx.ALL, 5)
btn_sizer.Add((60, 0), 1, wx.EXPAND, 5)
self.submit_btn = wx.Button(self.body, wx.ID_ANY, u"登录", wx.DefaultPosition, wx.DefaultSize, 0)
self.submit_btn.SetFont(
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体"))
btn_sizer.Add(self.submit_btn, 0, wx.ALL, 5)
btn_sizer.Add((0, 15), 1, wx.EXPAND, 5)
body_sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)
self.body.SetSizer(body_sizer)
self.body.Layout()
body_sizer.Fit(self.body)
page_sizer.Add(self.body, 1, wx.EXPAND | wx.ALL, 5)
self.SetSizer(page_sizer)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.m_textCtrl5.Bind(wx.EVT_KEY_UP, self.on_enter_up)
self.exit_btn.Bind(wx.EVT_LEFT_UP, self.on_exit_click)
self.submit_btn.Bind(wx.EVT_LEFT_UP, self.on_sumbit_click)
def __del__(self):
pass
def on_enter_up(self, event):
event.Skip()
def on_exit_click(self, event):
event.Skip()
def on_sumbit_click(self, event):
event.Skip()
def get_code(self):
url = "http://127.0.0.1:8080/get_phone_code/"
# requests.post(url, data={"phone": self._body.phone_page.phone})
if __name__ == '__main__':
app = wx.App()
# frame = LoginPage1(None)
frame = LoginPage(None, "登录", size=(500, 300), page_title="登录")
frame = LoginPage(None, "登录", size=(500, 320), page_title="登录")
frame.Show()
app.MainLoop()

Loading…
Cancel
Save