Jingxun 9 months ago
parent
commit
064c83dfe3
  1. 48
      frontend/components_lib/frame.py
  2. 2
      frontend/components_lib/panel.py
  3. 43
      frontend/static_gui_tmp/login_page.py
  4. 174
      frontend/static_pages/login_page.py

48
frontend/components_lib/frame.py

@ -13,6 +13,7 @@ class Frame(wx.Frame):
"""
做了个简单的封装来完成一些通用的配置
"""
def __init__(
self,
parent,
@ -43,20 +44,63 @@ class Frame(wx.Frame):
self.__min_size = min_size
self.__max_size = max_size
self.__body = None
self._body = None
self.__bg_color = bg_color
self.__size = size
self._OnInit()
self.show()
def _OnInit(self):
self.SetSizeHints(wx.Size(*self.__min_size), wx.Size(*self.__max_size))
self.SetBackgroundColour(wx.Colour(255, 255, 255))
def sizer(self, size, orient):
"""
创建整体最外层 sizer 容器
:param size: sizer 大小
:param orient: sizer 中元素的对齐方式
:return:
"""
out_sizer = wx.BoxSizer(orient)
out_sizer.SetMinSize(wx.Size(*size))
return out_sizer
@staticmethod
def get_body(parent, _id, pos, size, style):
"""
调用 body 类来获取页面
:param parent:
:param _id:
:param pos:
:param size:
:param style:
:return:
"""
return
def show(self):
pass
"""
最后的汇总 hook
:return:
"""
# 获取整个页面的 body
self._body = self.get_body(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
# 给 body 设置 sizer
self._body.SetSizer(self._body.body_sizer)
self._body.Layout()
# 自适应最小大小
self._body.body_sizer.Fit(self._body)
# 创建最外层的 frame sizer
frame_sizer = self.sizer(self.__size, wx.VERTICAL)
# 将 body 添加到 frame sizer 中
frame_sizer.Add(self._body, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
self.SetSizer(frame_sizer)
self.Layout()
# 将窗口展示在显示器中心
self.Centre(wx.BOTH)
# 绑定事件
self.event_bind()
def event_bind(self):
pass

2
frontend/components_lib/panel.py

@ -131,7 +131,7 @@ class Panel(wx.Panel):
这个方法便是每个页面的 content 部分由子类中实现
:return:
"""
pass
return
def button_components(
self,

43
frontend/static_gui_tmp/login_page.py

@ -117,20 +117,6 @@ class LoginPage(Frame):
"""
def __init__(self, parent, title, size):
Frame.__init__(self, parent, title=title, size=size)
self.__size = size
# 调用 hook
self.show()
def sizer(self, size, orient):
"""
创建整体最外层 sizer 容器
:param size: sizer 大小
:param orient: sizer 中元素的对齐方式
:return:
"""
out_sizer = wx.BoxSizer(orient)
out_sizer.SetMinSize(wx.Size(*size))
return out_sizer
@staticmethod
def get_body(parent, _id, pos, size, style):
@ -146,29 +132,6 @@ class LoginPage(Frame):
body_panel = LoginBody(parent, _id, pos, size, style)
return body_panel
def show(self):
"""
最后的汇总 hook
:return:
"""
# 获取整个页面的 body
self.__body = self.get_body(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
# 给 body 设置 sizer
self.__body.SetSizer(self.__body.body_sizer)
self.__body.Layout()
# 自适应最小大小
self.__body.body_sizer.Fit(self.__body)
# 创建最外层的 frame sizer
frame_sizer = self.sizer(self.__size, wx.VERTICAL)
# 将 body 添加到 frame sizer 中
frame_sizer.Add(self.__body, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
self.SetSizer(frame_sizer)
self.Layout()
# 将窗口展示在显示器中心
self.Centre(wx.BOTH)
# 绑定事件
self.event_bind()
def event_bind(self):
"""
绑定事件
@ -177,10 +140,10 @@ class LoginPage(Frame):
# 给两个按钮绑定点击事件
# 这里绑定的事件为当鼠标左键抬起时触发,因为鼠标左键按下还未抬起的时候
# 还有可以后悔的余地,不应该触发事件,但是按下后松开抬起,则是确定要点击该按钮
self.__body.exit_btn.Bind(wx.EVT_LEFT_UP, self.exit_onclick)
self.__body.submit_btn.Bind(wx.EVT_LEFT_UP, self.login_onclick)
self._body.exit_btn.Bind(wx.EVT_LEFT_UP, self.exit_onclick)
self._body.submit_btn.Bind(wx.EVT_LEFT_UP, self.login_onclick)
# 给密码输入框绑定回车事件
self.__body.pwd.Bind(wx.EVT_KEY_UP, self.on_enter_up)
self._body.pwd.Bind(wx.EVT_KEY_UP, self.on_enter_up)
def on_enter_up(self, event):
key_code = event.GetKeyCode()

174
frontend/static_pages/login_page.py

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

Loading…
Cancel
Save