Compare commits
4 Commits
5a3cdac920
...
773a75fe5b
Author | SHA1 | Date |
---|---|---|
qiancj | 773a75fe5b | 9 months ago |
qiancj | 2bec43a79f | 9 months ago |
qiancj | aaadd63801 | 9 months ago |
qiancj | 175cc16ba8 | 9 months ago |
5 changed files with 2025 additions and 547 deletions
@ -1,313 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
import wx |
|||
import wx.xrc |
|||
import wx.grid |
|||
|
|||
from frontend.components_lib import ( |
|||
Panel, Frame, FontSize, LayoutParams, FileDirPicker, FileDirPickerParam, GridTable |
|||
) |
|||
|
|||
|
|||
class DataImportBody(Panel): |
|||
""" |
|||
整个页面的 body 部分 |
|||
""" |
|||
def __init__(self, parent, _id, pos, size, style, page_title): |
|||
""" |
|||
:param parent: |
|||
:param _id: |
|||
:param pos: |
|||
:param size: |
|||
:param style: |
|||
:param page_title: 页面的标题 |
|||
""" |
|||
Panel.__init__(self, parent, _id, pos, size, style) |
|||
self.__page_title = page_title |
|||
self.notebook = None |
|||
self.imp_page = None |
|||
self.rec_page = None |
|||
# 调用初始化 hook |
|||
self._OnInit() |
|||
|
|||
def _OnInit(self, *args, **kwargs): |
|||
""" |
|||
初始化 hook,在这个方法中将 body 中所有的组件集合在一起并添加到一个整体的 sizer 中 |
|||
:param args: |
|||
:param kwargs: |
|||
:return: |
|||
""" |
|||
# 创建 body sizer |
|||
self.body_sizer = wx.BoxSizer(wx.VERTICAL) |
|||
# 创建标题组件并添加到 body sizer 中 |
|||
self.body_sizer.Add( |
|||
self.title_components( |
|||
{ |
|||
"id": wx.ID_ANY, |
|||
"label": f"{self.__page_title}信息录入", |
|||
"pos": wx.DefaultPosition, |
|||
"size": wx.DefaultSize, |
|||
"style": 0 |
|||
} |
|||
), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 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, 5), LayoutParams.VER_LAYOUT |
|||
), 0, wx.ALIGN_CENTER_HORIZONTAL, 5 |
|||
) |
|||
|
|||
def content_components(self): |
|||
""" |
|||
这是 body 中的 content 部分,这个部分是页面的核心部分也是最复杂的部分 |
|||
:return: |
|||
""" |
|||
# 创建 content 部分的 sizer |
|||
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 = ImportPage(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 ImportPage(Panel): |
|||
def __init__(self, parent, _id, pos, size, style): |
|||
""" |
|||
这是 批量导入页的组件元素 |
|||
:param parent: |
|||
:param _id: |
|||
:param pos: |
|||
:param size: |
|||
:param style: |
|||
""" |
|||
Panel.__init__(self, parent, _id, pos, size, style) |
|||
self.file = None |
|||
# 基本配置 |
|||
self.SetFont(wx.Font(**FontSize.CONTENT_SIZE)) |
|||
self.SetMaxSize(wx.Size(700, 270)) |
|||
# 调用初始化 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(700, 270)) |
|||
# 获取 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): |
|||
""" |
|||
创建 content 部分的组件 |
|||
:return: |
|||
""" |
|||
# 创建 content sizer |
|||
outer_sizer = self.flex_sizer_generater(2, 1, 0, 0) |
|||
# 设置占位将元素垂直居中 |
|||
outer_sizer.Add((0, 100), *LayoutParams.HOR_LAYOUT) |
|||
# 创建文件选择器组件的 sizer |
|||
comp_sizer = self.flex_sizer_generater(1, 3, 0, 0) |
|||
# 创建文件选择器组件 |
|||
file_pick = (_, _, (self.file, *_)) = FileDirPicker( |
|||
self, |
|||
{"id": wx.ID_ANY, "label": "选择文件", "pos": wx.DefaultPosition, "size": wx.DefaultSize, "style": 0}, |
|||
(5, 0), FileDirPickerParam.FILE_OBJ, FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT |
|||
).get_item |
|||
# 设置文件选择器的大小 |
|||
self.file.SetMinSize(wx.Size(400, -1)) |
|||
# 将文件选择器组件添加到 sizer 中 |
|||
comp_sizer.AddMany(file_pick) |
|||
outer_sizer.Add(comp_sizer, 1, wx.EXPAND, 5) |
|||
return outer_sizer |
|||
|
|||
|
|||
class RecordPage(ImportPage): |
|||
def __init__(self, parent, _id, pos, size, style): |
|||
""" |
|||
页面框架都一样,继承自批量导入页面 |
|||
:param parent: |
|||
:param _id: |
|||
:param pos: |
|||
:param size: |
|||
:param style: |
|||
""" |
|||
Panel.__init__(self, parent, _id, pos, size, style) |
|||
self.SetFont(wx.Font(**FontSize.CONTENT_SIZE)) |
|||
self.SetMaxSize(wx.Size(700, 270)) |
|||
# 调用初始化 hook |
|||
self._OnInit() |
|||
|
|||
def grid_generater(self, num_rows, num_cols, style): |
|||
""" |
|||
该方法是一个表格生成器 |
|||
:param num_rows: 行数 |
|||
:param num_cols: 列数 |
|||
:param style: 这个 style 和其他的组件中的 style不一样,这是我自定义的 style |
|||
{ |
|||
"col_names": Tuple[Str], 列名 |
|||
"col_wid": Tuple[Number]/None, 列宽 |
|||
"edit": Boolean, 表格中数据是否可写 |
|||
"lines": Boolean, 表格边框线是否可见 |
|||
"drag_size": Boolean, 是否可以拖拽修改表格大小 |
|||
"drag_move": Boolean, 是否可以拖拽移动行和列 |
|||
"drag_rc_size": Boolean, 是否可以拖拽改变行高和列宽 |
|||
"margins": Tuple[Number], 外边框间隔 |
|||
"font": Dict, 字体参数 |
|||
"col_align": Tuple[Number], 表头的对齐方式 |
|||
"row_align": Tuple[Number], 序号列对齐方式 |
|||
"cell_align": Tuple[Number], 单元格对齐方式 |
|||
"size": Tuple[Number] 表格大小 |
|||
} |
|||
:return: |
|||
""" |
|||
# 创建表格 |
|||
table = GridTable(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, style) |
|||
table.CreateGrid(num_rows, num_cols) |
|||
# 设置表格各方面样式及配置 |
|||
table.set_table(num_cols) |
|||
return table |
|||
|
|||
def content_components(self): |
|||
# 生成表格 |
|||
out = self.grid_generater( |
|||
15, 5, |
|||
{ |
|||
"col_names": ("导入日期", "导入时间", "操作人", "文件名称", "导入状态"), |
|||
"col_wid": (104, 101, 86, 190, 110), |
|||
"font": FontSize.CONTENT_SIZE, |
|||
"col_align": (wx.ALIGN_CENTER, wx.ALIGN_CENTER), |
|||
"row_align": (wx.ALIGN_CENTER, wx.ALIGN_CENTER), |
|||
"cell_align": (wx.ALIGN_CENTER, wx.ALIGN_CENTER), |
|||
"size": (700, 270) |
|||
} |
|||
) |
|||
self.get_data() |
|||
return out |
|||
|
|||
def get_data(self): |
|||
pass |
|||
|
|||
|
|||
class DataImportPage(Frame): |
|||
def __init__(self, parent, title, size, page_title): |
|||
Frame.__init__(self, parent, title=title, size=size) |
|||
self.__size = size |
|||
self.__page_title = page_title |
|||
# 调用最终汇总 hook |
|||
self.show() |
|||
|
|||
def sizer(self, size, orient): |
|||
""" |
|||
创建最外层 sizer |
|||
:param size: 大小 |
|||
:param orient: 对齐方式 |
|||
:return: |
|||
""" |
|||
out_sizer = wx.BoxSizer(orient) |
|||
out_sizer.SetMinSize(wx.Size(*size)) |
|||
return out_sizer |
|||
|
|||
def get_body(self, parent, _id, pos, size, style): |
|||
""" |
|||
获取页面的 body |
|||
:param parent: |
|||
:param _id: |
|||
:param pos: |
|||
:param size: |
|||
:param style: |
|||
:return: |
|||
""" |
|||
body_panel = DataImportBody(parent, _id, pos, size, style, self.__page_title) |
|||
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) |
|||
# 设置 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) |
|||
# 设置 sizer |
|||
self.SetSizer(frame_sizer) |
|||
self.Layout() |
|||
# 将窗口展示到显示器中心 |
|||
self.Centre(wx.BOTH) |
|||
# 事件绑定 |
|||
self.event_bind() |
|||
|
|||
def exit_onclick(self, event): |
|||
self.Destroy() |
|||
|
|||
def login_onclick(self, event): |
|||
idx = self.__body.notebook.GetSelection() |
|||
op = "导入" if self.__body.notebook.GetPage(idx) == self.__body.imp_page else "导出" |
|||
popup = wx.MessageDialog(None, f"您提交了{op}操作", f"{op}操作", wx.YES_DEFAULT) |
|||
if popup.ShowModal() == wx.ID_YES: |
|||
self.Close() |
|||
|
|||
def change_btn_name(self, event): |
|||
idx = self.__body.notebook.GetSelection() |
|||
if self.__body.notebook.GetPage(idx) == self.__body.imp_page: |
|||
self.__body.submit_btn.SetLabel("导入") |
|||
else: |
|||
self.__body.submit_btn.SetLabel("导出") |
|||
|
|||
def event_bind(self): |
|||
""" |
|||
事件绑定 |
|||
:return: |
|||
""" |
|||
self.__body.exit_btn.Bind(wx.EVT_LEFT_UP, self.exit_onclick) |
|||
self.__body.submit_btn.Bind(wx.EVT_LEFT_UP, self.login_onclick) |
|||
# 给 notebook 绑定页签切换事件 |
|||
self.__body.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.change_btn_name) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
app = wx.App() |
|||
frame = DataImportPage(None, "数据导入", (800, 510), "积层") |
|||
frame.Show() |
|||
app.MainLoop() |
@ -1,166 +0,0 @@ |
|||
# encoding: utf-8 |
|||
""" |
|||
@author: Qiancj |
|||
@contact: qiancj@risenenergy.com |
|||
@file: tests |
|||
@create-time: 2023-08-01 14:08 |
|||
@description: The new python script |
|||
""" |
|||
|
|||
import wx |
|||
|
|||
from frontend.components_lib import ( |
|||
DropList, InputLabel, LayoutParams, Frame, Panel, FontSize |
|||
) |
|||
|
|||
|
|||
class LoginBody(Panel): |
|||
""" |
|||
这是页面的 body 部分,由于页面 body 部分较为复杂,所以单独拆分一个类来实现 |
|||
""" |
|||
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 |
|||
# 调用初始化 hook |
|||
self._OnInit() |
|||
|
|||
def _OnInit(self, *args, **kwargs): |
|||
""" |
|||
初始化 hook,在这个方法中将 body 中所有的组件集合在一起并添加到一个整体的 sizer 中 |
|||
:param args: |
|||
:param kwargs: |
|||
:return: |
|||
""" |
|||
# 创建 body sizer |
|||
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): |
|||
""" |
|||
这是 body 中的 content 部分,这个部分是页面的核心部分也是最复杂的部分 |
|||
:return: |
|||
""" |
|||
# 创建 content 部分的 sizer |
|||
content_sizer = self.flex_sizer_generater(0, 3, 0, 0) |
|||
|
|||
# 创建并配置 droplist 组件 |
|||
# 该组件为三列单行组件,基本格式为 [文字栏][空白占位栏][下拉菜单控件栏] |
|||
# 数据结构为 ((文字控件, 排版参数), (空白占位控件, 排版参数), (下拉菜单控件, 排版参数)) |
|||
# 通过解构赋值来讲下拉菜单控件赋值给 droplist 属性 |
|||
droplist = (_, _, (self.drop_list, *_)) = DropList( |
|||
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(180, -1), "style": 0, |
|||
"choices": [ |
|||
"积层", "焊接极耳", "三封口", "注液前称重", "注液", "注液后称重", "排气后称重", "容量测试", |
|||
"AC1", "AC2", "AC3", "AC4", "补电测试", "入库", "出库装箱", "管理员" |
|||
] |
|||
}, |
|||
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT |
|||
).get_item |
|||
|
|||
# 创建并配置用户名输入组件 |
|||
username = (_, _, (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(180, -1), "style": 0, "value": ""}, |
|||
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT |
|||
).get_item |
|||
|
|||
# 创建并配置密码输入组件 |
|||
pwd = (_, _, (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(180, -1), "style": wx.TE_PASSWORD, |
|||
"value": "" |
|||
}, |
|||
FontSize.CONTENT_SIZE, LayoutParams.VER_LAYOUT |
|||
).get_item |
|||
|
|||
# 配置 content 部分距离底部按钮之间的空白占位,即 margin |
|||
btm_spacer = [(0, 5), *LayoutParams.VER_LAYOUT] |
|||
|
|||
# 将各组件添加到 content sizer 中 |
|||
content_comp = (*droplist, *username, *pwd, btm_spacer) |
|||
content_sizer.AddMany(content_comp) |
|||
return content_sizer |
|||
|
|||
|
|||
class LoginPage(Frame): |
|||
""" |
|||
登录页面的事件绑定,页面展示 |
|||
""" |
|||
def __init__(self, parent, title, size): |
|||
Frame.__init__(self, parent, title=title, size=size) |
|||
|
|||
@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.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) |
|||
|
|||
def on_enter_up(self, event): |
|||
key_code = event.GetKeyCode() |
|||
if key_code == 13: |
|||
self.login_onclick(None) |
|||
|
|||
def exit_onclick(self, event): |
|||
self.Destroy() |
|||
|
|||
def login_onclick(self, event): |
|||
popup = wx.MessageDialog(None, "您提交了登录操作", "登录操作", wx.YES_DEFAULT) |
|||
if popup.ShowModal() == wx.ID_YES: |
|||
self.Close() |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
app = wx.App() |
|||
frame = LoginPage(None, "登录", size=(500, 320)) |
|||
frame.Show() |
|||
app.MainLoop() |
@ -0,0 +1,286 @@ |
|||
# encoding: utf-8 |
|||
""" |
|||
@author: Qiancj |
|||
@contact: qiancj@risenenergy.com |
|||
@file: main_page |
|||
@create-time: 2023-08-22 15:40 |
|||
@description: The new python script |
|||
""" |
|||
|
|||
########################################################################### |
|||
## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3) |
|||
## http://www.wxformbuilder.org/ |
|||
## |
|||
## PLEASE DO *NOT* EDIT THIS FILE! |
|||
########################################################################### |
|||
|
|||
import wx |
|||
import wx.xrc |
|||
|
|||
|
|||
########################################################################### |
|||
## Class MainPage |
|||
########################################################################### |
|||
|
|||
class MainPage(wx.Frame): |
|||
|
|||
def __init__(self, parent): |
|||
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, |
|||
size=wx.Size(800, 600), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) |
|||
|
|||
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) |
|||
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) |
|||
self.body.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW)) |
|||
|
|||
body_sizer = wx.FlexGridSizer(0, 1, 0, 0) |
|||
body_sizer.SetFlexibleDirection(wx.BOTH) |
|||
body_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
body_sizer.Add((0, 10), 1, wx.EXPAND, 5) |
|||
|
|||
title_sizer = wx.FlexGridSizer(0, 1, 0, 0) |
|||
title_sizer.SetFlexibleDirection(wx.BOTH) |
|||
title_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
self.m_staticText6 = wx.StaticText(self.body, wx.ID_ANY, u"钱都去哪了", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText6.Wrap(-1) |
|||
|
|||
self.m_staticText6.SetFont( |
|||
wx.Font(22, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
title_sizer.Add(self.m_staticText6, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
body_sizer.Add(title_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
body_sizer.Add((0, 10), 1, wx.EXPAND, 5) |
|||
|
|||
content_sizer = wx.FlexGridSizer(0, 1, 0, 0) |
|||
content_sizer.SetFlexibleDirection(wx.BOTH) |
|||
content_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
fgSizer12 = wx.FlexGridSizer(0, 11, 0, 0) |
|||
fgSizer12.SetFlexibleDirection(wx.BOTH) |
|||
fgSizer12.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
self.m_staticText7 = wx.StaticText(self.body, wx.ID_ANY, u"月总预算", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText7.Wrap(-1) |
|||
|
|||
self.m_staticText7.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText7, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl5 = wx.TextCtrl(self.body, wx.ID_ANY, u"3012", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl5.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl5.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl5, 0, wx.ALL, 5) |
|||
|
|||
fgSizer12.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_staticText15 = wx.StaticText(self.body, wx.ID_ANY, u"月余预算", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText15.Wrap(-1) |
|||
|
|||
self.m_staticText15.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText15, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl6 = wx.TextCtrl(self.body, wx.ID_ANY, u"2930", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl6.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl6.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl6, 0, wx.ALL, 5) |
|||
|
|||
fgSizer12.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_staticText11 = wx.StaticText(self.body, wx.ID_ANY, u"剩余天数", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText11.Wrap(-1) |
|||
|
|||
self.m_staticText11.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText11, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl10 = wx.TextCtrl(self.body, wx.ID_ANY, u"29", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl10.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl10.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl10, 0, wx.ALL, 5) |
|||
|
|||
self.m_staticText9 = wx.StaticText(self.body, wx.ID_ANY, u"日总预算", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText9.Wrap(-1) |
|||
|
|||
self.m_staticText9.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText9, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl9 = wx.TextCtrl(self.body, wx.ID_ANY, u"115", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl9.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl9.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl9, 0, wx.ALL, 5) |
|||
|
|||
fgSizer12.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_staticText12 = wx.StaticText(self.body, wx.ID_ANY, u"今日消费", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText12.Wrap(-1) |
|||
|
|||
self.m_staticText12.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText12, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl8 = wx.TextCtrl(self.body, wx.ID_ANY, u"46", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl8.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl8.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl8, 0, wx.ALL, 5) |
|||
|
|||
fgSizer12.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_staticText16 = wx.StaticText(self.body, wx.ID_ANY, u"日余预算", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_staticText16.Wrap(-1) |
|||
|
|||
self.m_staticText16.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
fgSizer12.Add(self.m_staticText16, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
fgSizer12.Add((5, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_textCtrl7 = wx.TextCtrl(self.body, wx.ID_ANY, u"69", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_textCtrl7.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
self.m_textCtrl7.Enable(False) |
|||
|
|||
fgSizer12.Add(self.m_textCtrl7, 0, wx.ALL, 5) |
|||
|
|||
content_sizer.Add(fgSizer12, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
content_sizer.Add((0, 5), 1, wx.EXPAND, 5) |
|||
|
|||
fgSizer13 = wx.FlexGridSizer(0, 1, 0, 0) |
|||
fgSizer13.SetFlexibleDirection(wx.BOTH) |
|||
fgSizer13.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
fgSizer13.SetMinSize(wx.Size(700, 290)) |
|||
sbSizer3 = wx.StaticBoxSizer(wx.StaticBox(self.body, wx.ID_ANY, u"账单列表"), wx.VERTICAL) |
|||
|
|||
sbSizer3.SetMinSize(wx.Size(700, 290)) |
|||
self.m_scrolledWindow1 = wx.ScrolledWindow(sbSizer3.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, |
|||
wx.DefaultSize, wx.HSCROLL | wx.VSCROLL) |
|||
self.m_scrolledWindow1.SetScrollRate(5, 5) |
|||
self.m_scrolledWindow1.SetMinSize(wx.Size(700, 290)) |
|||
self.m_scrolledWindow1.SetMaxSize(wx.Size(700, 290)) |
|||
|
|||
fgSizer14 = wx.FlexGridSizer(0, 1, 0, 0) |
|||
fgSizer14.SetFlexibleDirection(wx.BOTH) |
|||
fgSizer14.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
fgSizer14.SetMinSize(wx.Size(700, 290)) |
|||
self.m_checkBox63 = wx.CheckBox(self.m_scrolledWindow1, wx.ID_ANY, |
|||
u"{id}·|·{date}·|·{time}·|·{value}·|·{tag}·|·{details}", wx.DefaultPosition, |
|||
wx.DefaultSize, 0) |
|||
self.m_checkBox63.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "微软雅黑")) |
|||
|
|||
fgSizer14.Add(self.m_checkBox63, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) |
|||
|
|||
self.m_scrolledWindow1.SetSizer(fgSizer14) |
|||
self.m_scrolledWindow1.Layout() |
|||
fgSizer14.Fit(self.m_scrolledWindow1) |
|||
sbSizer3.Add(self.m_scrolledWindow1, 0, wx.ALL, 5) |
|||
|
|||
fgSizer13.Add(sbSizer3, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
content_sizer.Add(fgSizer13, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
body_sizer.Add(content_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
body_sizer.Add((0, 10), 1, wx.EXPAND, 5) |
|||
|
|||
btn_sizer = wx.FlexGridSizer(0, 7, 0, 0) |
|||
btn_sizer.SetFlexibleDirection(wx.BOTH) |
|||
btn_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) |
|||
|
|||
self.m_button4 = wx.Button(self.body, wx.ID_ANY, u"退出系统", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_button4.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
btn_sizer.Add(self.m_button4, 0, wx.ALL, 5) |
|||
|
|||
btn_sizer.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_button6 = wx.Button(self.body, wx.ID_ANY, u"批量删除", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_button6.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
btn_sizer.Add(self.m_button6, 0, wx.ALL, 5) |
|||
|
|||
btn_sizer.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_button5 = wx.Button(self.body, wx.ID_ANY, u"日终结算", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_button5.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
btn_sizer.Add(self.m_button5, 0, wx.ALL, 5) |
|||
|
|||
btn_sizer.Add((20, 0), 1, wx.EXPAND, 5) |
|||
|
|||
self.m_button7 = wx.Button(self.body, wx.ID_ANY, u"新增记账", wx.DefaultPosition, wx.DefaultSize, 0) |
|||
self.m_button7.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
btn_sizer.Add(self.m_button7, 0, wx.ALL, 5) |
|||
|
|||
body_sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
body_sizer.Add((0, 10), 1, wx.EXPAND, 5) |
|||
|
|||
self.body.SetSizer(body_sizer) |
|||
self.body.Layout() |
|||
body_sizer.Fit(self.body) |
|||
page_sizer.Add(self.body, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) |
|||
|
|||
self.SetSizer(page_sizer) |
|||
self.Layout() |
|||
self.m_menubar2 = wx.MenuBar(0) |
|||
self.m_menubar2.SetFont( |
|||
wx.Font(14, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "黑体")) |
|||
|
|||
self.m_menu2 = wx.Menu() |
|||
self.m_menu21 = wx.Menu() |
|||
self.m_menu2.AppendSubMenu(self.m_menu21, u"绑定手机") |
|||
|
|||
self.m_menu3 = wx.Menu() |
|||
self.m_menu2.AppendSubMenu(self.m_menu3, u"退出登录") |
|||
|
|||
self.m_menubar2.Append(self.m_menu2, u"用户名") |
|||
|
|||
self.SetMenuBar(self.m_menubar2) |
|||
|
|||
self.Centre(wx.BOTH) |
|||
|
|||
def __del__(self): |
|||
pass |
File diff suppressed because it is too large
Loading…
Reference in new issue