|
|
@ -1,12 +1,174 @@ |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
|
|
|
import wx |
|
|
|
import wx.xrc |
|
|
|
|
|
|
|
from frontend.components_lib import ( |
|
|
|
Frame, Panel, LayoutParams, FontSize, InputLabel |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
class LoginBody(Panel): |
|
|
|
def __init__(self, parent, _id, pos, size, style): |
|
|
|
Panel.__init__(self, parent, _id, pos, size, style) |
|
|
|
self.drop_list = None |
|
|
|
self.username = None |
|
|
|
self.pwd = None |
|
|
|
self.notebook = None |
|
|
|
# 调用初始化 hook |
|
|
|
self._OnInit() |
|
|
|
|
|
|
|
def _OnInit(self, *args, **kwargs): |
|
|
|
self.body_sizer = wx.BoxSizer(wx.VERTICAL) |
|
|
|
# 创建标题组件并添加到 body sizer 中 |
|
|
|
self.body_sizer.Add( |
|
|
|
self.title_components( |
|
|
|
{ |
|
|
|
"id": wx.ID_ANY, |
|
|
|
"label": "登 录", |
|
|
|
"pos": wx.DefaultPosition, |
|
|
|
"size": wx.DefaultSize, |
|
|
|
"style": 0 |
|
|
|
} |
|
|
|
), 0, wx.ALIGN_CENTER_HORIZONTAL, 5 |
|
|
|
) |
|
|
|
# 创建 content 部分的组件并添加到 body sizer 中 |
|
|
|
# self.body_sizer.Add(self.content_components(), 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|
|
|
# 创建底部按钮组件并添加到 body sizer 中 |
|
|
|
self.body_sizer.Add( |
|
|
|
self.button_components( |
|
|
|
"退出", "登录", (80, 0), (0, 15), LayoutParams.VER_LAYOUT |
|
|
|
), 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|
|
|
|
|
|
|
def content_components(self): |
|
|
|
content_sizer = self.flex_sizer_generater(0, 1, 0, 0) |
|
|
|
|
|
|
|
# 创建 notebook 组件,用来实现多标签页切换 |
|
|
|
self.notebook = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) |
|
|
|
|
|
|
|
# notebook 组件的基本配置设定 |
|
|
|
self.notebook.SetFont(wx.Font(**FontSize.CONTENT_SIZE)) |
|
|
|
self.notebook.SetBackgroundColour(wx.Colour(255, 255, 255)) |
|
|
|
|
|
|
|
# 创建数据导入页 |
|
|
|
self.imp_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) |
|
|
|
|
|
|
|
# 将两页添加到 notebook 中,默认选中 批量导入 页签 |
|
|
|
self.notebook.AddPage(self.imp_page, "批量导入", True) |
|
|
|
self.notebook.AddPage(self.rec_page, "导入记录", False) |
|
|
|
|
|
|
|
# 将 notebook 组件添加到 content sizer 中 |
|
|
|
content_sizer.Add(self.notebook, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5) |
|
|
|
# 配置 content 部分距离底部按钮之间的空白占位,即 margin |
|
|
|
content_sizer.Add((0, 1), 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL | wx.EXPAND, 5) |
|
|
|
return content_sizer |
|
|
|
|
|
|
|
|
|
|
|
class PhonePage(Panel): |
|
|
|
def __init__(self, parent, _id, pos, size, style): |
|
|
|
Panel.__init__(self, parent, _id, pos, size, style) |
|
|
|
self.phone = None |
|
|
|
self.code_val = None |
|
|
|
self.get_code_btn = None |
|
|
|
self.SetFont(wx.Font(**FontSize.CONTENT_SIZE)) |
|
|
|
self.SetMaxSize(wx.Size(400, 115)) |
|
|
|
# 调用初始化 hook |
|
|
|
self._OnInit() |
|
|
|
|
|
|
|
def _OnInit(self, *args, **kwargs): |
|
|
|
""" |
|
|
|
初始化 hook,将页面整合并做相应的页面配置 |
|
|
|
:param args: |
|
|
|
:param kwargs: |
|
|
|
:return: |
|
|
|
""" |
|
|
|
# 创建页面 sizer |
|
|
|
self.page_sizer = wx.BoxSizer(wx.VERTICAL) |
|
|
|
# 配置大小 |
|
|
|
self.page_sizer.SetMinSize(wx.Size(400, 115)) |
|
|
|
# 获取 content 部分并添加到页面 sizer 中 |
|
|
|
self.page_sizer.Add(self.content_components(), 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|
|
|
# 设置sizer |
|
|
|
self.SetSizer(self.page_sizer) |
|
|
|
self.Layout() |
|
|
|
# 自适应最小大小 |
|
|
|
self.page_sizer.Fit(self) |
|
|
|
|
|
|
|
def content_components(self): |
|
|
|
# 创建文件选择器组件的 sizer |
|
|
|
comp_sizer = self.flex_sizer_generater(2, 3, 0, 0) |
|
|
|
# 创建文件选择器组件 |
|
|
|
user = (_, _, (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, *_))) = |
|
|
|
# 将文件选择器组件添加到 sizer 中 |
|
|
|
comp_sizer.AddMany(user) |
|
|
|
return comp_sizer |
|
|
|
|
|
|
|
|
|
|
|
class LoginPage(Frame): |
|
|
|
def __init__(self, parent, title, size): |
|
|
|
Frame.__init__(self, parent, title=title, size=size) |
|
|
|
self.__size = size |
|
|
|
# 调用 hook |
|
|
|
self.show() |
|
|
|
|
|
|
|
@staticmethod |
|
|
|
def get_body(parent, _id, pos, size, style): |
|
|
|
""" |
|
|
|
调用 body 类来获取页面 |
|
|
|
:param parent: |
|
|
|
:param _id: |
|
|
|
:param pos: |
|
|
|
:param size: |
|
|
|
:param style: |
|
|
|
:return: |
|
|
|
""" |
|
|
|
body_panel = LoginBody(parent, _id, pos, size, style) |
|
|
|
return body_panel |
|
|
|
|
|
|
|
def event_bind(self): |
|
|
|
""" |
|
|
|
绑定事件 |
|
|
|
:return: |
|
|
|
""" |
|
|
|
# 给两个按钮绑定点击事件 |
|
|
|
# 这里绑定的事件为当鼠标左键抬起时触发,因为鼠标左键按下还未抬起的时候 |
|
|
|
# 还有可以后悔的余地,不应该触发事件,但是按下后松开抬起,则是确定要点击该按钮 |
|
|
|
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.pwd.Bind(wx.EVT_KEY_UP, self.on_enter_up) |
|
|
|
|
|
|
|
def on_exit_click(self, event): |
|
|
|
self.Destroy() |
|
|
|
|
|
|
|
def on_sumbit_click(self, event): |
|
|
|
popup = wx.MessageDialog(None, "您提交了登录操作", "登录操作", wx.YES_DEFAULT) |
|
|
|
if popup.ShowModal() == wx.ID_YES: |
|
|
|
self.Close() |
|
|
|
|
|
|
|
def on_enter_up(self, event): |
|
|
|
key_code = event.GetKeyCode() |
|
|
|
if key_code == 13: |
|
|
|
self.on_sumbit_click(None) |
|
|
|
|
|
|
|
def on_get_code_click(self, event): |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
class LoginPage(wx.Frame): |
|
|
|
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) |
|
|
|
|
|
|
@ -15,6 +177,7 @@ class LoginPage(wx.Frame): |
|
|
|
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) |
|
|
@ -93,7 +256,7 @@ class LoginPage(wx.Frame): |
|
|
|
self.phone_page.SetSizer(phone_sizer) |
|
|
|
self.phone_page.Layout() |
|
|
|
phone_sizer.Fit(self.phone_page) |
|
|
|
self.m_notebook1.AddPage(self.phone_page, u"手机验证码登录", False) |
|
|
|
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, "黑体")) |
|
|
@ -131,7 +294,7 @@ class LoginPage(wx.Frame): |
|
|
|
self.account_page.SetSizer(account_sizer) |
|
|
|
self.account_page.Layout() |
|
|
|
account_sizer.Fit(self.account_page) |
|
|
|
self.m_notebook1.AddPage(self.account_page, u"用户名密码登录", True) |
|
|
|
self.m_notebook1.AddPage(self.account_page, u"用户名密码登录", False) |
|
|
|
|
|
|
|
content_sizer.Add(self.m_notebook1, 1, wx.EXPAND | wx.ALL, 5) |
|
|
|
|
|
|
@ -190,6 +353,7 @@ class LoginPage(wx.Frame): |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
app = wx.App() |
|
|
|
frame = LoginPage(None) |
|
|
|
# frame = LoginPage1(None) |
|
|
|
frame = LoginPage(None, "登录", size=(500, 300)) |
|
|
|
frame.Show() |
|
|
|
app.MainLoop() |
|
|
|