赣州做网站公司移动端前端开发需要学什么
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:13
当前位置: 首页 > news >正文
赣州做网站公司,移动端前端开发需要学什么,建个企业网站需要什么,wordpress 支持vr吗目录 欢迎认识#xff0c;我是扑克中的黑桃A 扑克中的黑桃A的个人主页 前言#xff1a;与 CSDN 的第二次相遇 沉淀#xff1a;在基础领域凿出技术深井 量化成长#xff1a;从 0 到 1 的扎实积累 头衔增加#xff1a;技术能力的突破 日常 成就 憧憬 欢迎认识… 目录 欢迎认识我是扑克中的黑桃A 扑克中的黑桃A的个人主页 前言与 CSDN 的第二次相遇 沉淀在基础领域凿出技术深井 量化成长从 0 到 1 的扎实积累 头衔增加技术能力的突破 日常 成就 憧憬 欢迎认识我是扑克中的黑桃A 扑克中的黑桃A的256天创作纪念日 扑克中的黑桃A的个人主页 前言与 CSDN 的第二次相遇 当鼠标点击 “发布” 按钮的那一刻距离我在 CSDN 写下第一篇博客《Pycharm 的好用设置和插件》已经过去了 256 天。如果说 128 天是创作旅程的起点那么此刻的我更像是站在技术成长的半山腰回望来时的路每一步都刻着代码的温度与社区的回响。这封报告不仅是对 256 天创作历程的复盘更是一次与技术、与自我、与社区的深度对话。 沉淀在基础领域凿出技术深井 量化成长从 0 到 1 的扎实积累 内容矩阵累计发布68篇原创其中金仓数据库征文-政务领域国产化数据库更替金仓 KingbaseES 应用实践这篇征文阅读量更是高达39580这是以前没有想过的数据。 热榜排名也有许多文章上了热榜其中AI对话高效输入指令攻略一了解AI对话指令更是在榜一霸榜三天 今天的数据和128天前的纪念日时相比已经有一个层的变化了。 这 256天的创作是一场充满惊喜的旅程。粉丝数量逐步增长目前已有4546位朋友关注他们的每一次关注都让我深感责任重大。文章总阅读量已经到了253,108人次排名从5333到了2150,让我备受鼓舞。 文章累计收获4779个赞、2904条评论和4014的收藏量。评论区里既有新手的感谢也有同行的建议。 甚至成了Python领域新星创作者还入选了作者榜。 头衔增加技术能力的突破 这128天继续获得了阿里云专家博主腾讯云TDP先锋会员腾讯云创作之星华为云初级校园大使等多个名号。 日常 创作已经在我大学生活中扮演着重要的角色。每当课余时间到来我都会先回顾当天学到的知识思考如何将所学运用到我的创作之中。有时灵感乍现即便是在课间休息的短暂片刻我也会迅速将思路记录在笔记本上。 晚上完成作业后我会静坐在电脑前投入一到两个小时的时间整理素材、编写代码、撰写文章。周末则是我专门留给创作的时间更深入地学习新的 Python 库和框架为我的创作积累更多内容和技巧。 虽然在创作与其他学业之间保持平衡并不容易但我总是制定详细的学习计划合理分配时间。例如我会在周一到周五集中精力完成课程学习而将周末的特定时段专门用于创作和深度学习确保两者都得到充分的关注和发展。这样的安排让我能够保持学业与创作的双赢让我在学习和创作之间找到了完美的平衡点。 成就 128天前写的是跳动的爱心李洵同款现在的是秒序任务待办清单。 import tkinter as tk from tkinter import filedialog, colorchooser, messagebox from PIL import Image, ImageTk import json from pathlib import Path from datetime import datetime from tkinter import ttkclass AdvancedTaskManager:def init(self, root):self.root rootself.root.title(秒序任务待办清单)self.tasks []self.data_file Path(tasks.json)self.drag_start_index Noneself.sort_mode tk.StringVar(valueauto)self.sort_criteria tk.StringVar(valuepriority) # 新增排序依据self.custom_order []self.checkbox_width 4self.bg_image Noneself.bg_photo None# 初始化背景self.background_label tk.Label(self.root)self.background_label.place(relx0, rely0, relwidth1, relheight1)# 样式管理 Combobox 背景色self.combo_style ttk.Style()self.combo_style.map(Custom.TCombobox,fieldbackground[(readonly, white)],selectbackground[(readonly, white)],selectforeground[(readonly, black)])# 创建界面组件self.create_widgets()# 加载任务数据self.load_tasks()# 初始更新列表显示self.update_lists()# 设置窗口关闭事件self.root.protocol(WM_DELETE_WINDOW, self.on_close)def create_widgets(self):# 左侧任务列表区域 list_container tk.Frame(self.root, bd2, relieftk.GROOVE)list_container.pack(sidetk.LEFT, padx10, pady10, filltk.BOTH, expandTrue)# 分割线标签 - 未完成任务tk.Label(list_container, text未完成任务, font(微软雅黑, 12, bold)).pack(anchorw, pady(5, 0))# 未完成任务列表ongoing_frame tk.Frame(list_container)ongoing_frame.pack(filltk.BOTH, expandTrue)ongoing_scrollbar tk.Scrollbar(ongoing_frame)ongoing_scrollbar.pack(sidetk.RIGHT, filltk.Y)self.ongoing_list tk.Listbox(ongoing_frame,yscrollcommandongoing_scrollbar.set,font(微软雅黑, 11),selectbackground#1E90FF,selectforegroundwhite,selectmodetk.SINGLE,height8,width50,activestylenone,bgwhite)self.ongoing_list.pack(filltk.BOTH, expandTrue)ongoing_scrollbar.config(commandself.ongoing_list.yview)# 分隔空间tk.Frame(list_container, height10).pack()# 已完成任务标题tk.Label(list_container, text已完成任务, font(微软雅黑, 12, bold)).pack(anchorw, pady(5, 0))# 已完成任务列表completed_frame tk.Frame(list_container)completed_frame.pack(filltk.BOTH, expandTrue)completed_scrollbar tk.Scrollbar(completed_frame)completed_scrollbar.pack(sidetk.RIGHT, filltk.Y)self.completed_list tk.Listbox(completed_frame,yscrollcommandcompleted_scrollbar.set,font(微软雅黑, 11),selectbackground#1E90FF,selectforegroundwhite,selectmodetk.SINGLE,height7,width50,activestylenone,bgwhite)self.completed_list.pack(filltk.BOTH, expandTrue)completed_scrollbar.config(commandself.completed_list.yview)# 绑定事件self.ongoing_list.bind(Button-1, self.on_click)self.ongoing_list.bind(Button-3, self.show_context_menu)self.completed_list.bind(Button-1, self.on_click)self.completed_list.bind(Button-3, self.show_context_menu)# 右侧控制面板区域 control_frame tk.Frame(self.root)control_frame.pack(sidetk.RIGHT, padx10, pady10, filltk.Y)# 输入表单input_frame tk.LabelFrame(control_frame, text任务详情, padx10, pady10, bgwhite)input_frame.pack(pady10)tk.Label(input_frame, text任务名称, bgwhite).grid(row0, column0, stickyw)self.task_entry tk.Entry(input_frame, width25, bgwhite)self.task_entry.grid(row1, column0, pady5, stickywe)tk.Label(input_frame, text优先级1-5, bgwhite).grid(row2, column0, stickyw)# 使用自定义样式组合框self.priority_combo ttk.Combobox(input_frame,width23,values[1, 2, 3, 4, 5],styleCustom.TCombobox)self.priority_combo.grid(row3, column0, pady5)tk.Label(input_frame, text截止日期yyyy.mm.dd, bgwhite).grid(row4, column0, stickyw)self.due_date_entry tk.Entry(input_frame, width25, bgwhite)self.due_date_entry.grid(row5, column0, pady5)# 操作按钮btn_frame tk.Frame(control_frame, bgself.root.cget(bg))btn_frame.pack(pady15)self.add_btn self.create_button(btn_frame, 添加任务, #4CAF50, self.add_task)self.add_btn.grid(row0, column0, padx5)self.del_btn self.create_button(btn_frame, 删除任务, #ff4444, self.delete_task)self.del_btn.grid(row0, column1, padx5)# 移动控制move_frame tk.Frame(control_frame, bgself.root.cget(bg))move_frame.pack(pady10)self.move_up_btn self.create_button(move_frame, ↑ 上移, #2196F3, self.move_up, width10)self.move_down_btn self.create_button(move_frame, ↓ 下移, #2196F3, self.move_down, width10)self.move_up_btn.pack(sidetk.LEFT, padx5)self.move_down_btn.pack(sidetk.RIGHT, padx5)# 排序模式选择mode_frame tk.Frame(control_frame)mode_frame.pack(pady5)tk.Label(mode_frame, text排序模式, bgself.root.cget(bg)).pack(sidetk.LEFT)tk.Radiobutton(mode_frame,text自动排序,variableself.sort_mode,valueauto,commandself.update_move_buttons_visibility).pack(sidetk.LEFT)tk.Radiobutton(mode_frame,text手动排序,variableself.sort_mode,valuemanual,commandself.update_move_buttons_visibility).pack(sidetk.LEFT)# 排序依据选择仅自动排序时可用criteria_frame tk.Frame(control_frame)criteria_frame.pack(pady5)self.criteria_priority_rb tk.Radiobutton(criteria_frame,text按优先级,variableself.sort_criteria,valuepriority,commandself.sort_tasks)self.criteria_due_date_rb tk.Radiobutton(criteria_frame,text按截止日期,variableself.sort_criteria,valuedue_date,commandself.sort_tasks)self.criteria_priority_rb.pack(sidetk.LEFT)self.criteria_due_date_rb.pack(sidetk.LEFT)# 设置背景按钮bg_frame tk.Frame(control_frame, bgself.root.cget(bg))bg_frame.pack(pady10)self.create_button(bg_frame, 设置模块颜色, #808080, self.set_background_color, width20).pack(pady2)self.create_button(bg_frame, 上传背景图片, #808080, self.upload_background_image, width20).pack(pady2)self.create_button(bg_frame, 恢复默认背景, #808080, self.reset_background, width20).pack(pady2)# 初始化控件状态self.update_move_buttons_visibility()def create_button(self, parent, text, color, command, width12):return tk.Button(parent,texttext,commandcommand,bgcolor,fgwhite,widthwidth,reliefflat,activebackgroundcolor,highlightthickness0)def update_move_buttons_visibility(self):if self.sort_mode.get() manual:self.move_up_btn.pack(sidetk.LEFT, padx5)self.move_down_btn.pack(sidetk.RIGHT, padx5)self.criteria_priority_rb.config(statetk.DISABLED)self.criteria_due_date_rb.config(statetk.DISABLED)else:self.move_up_btn.pack_forget()self.move_down_btn.pack_forget()self.criteria_priority_rb.config(statetk.NORMAL)self.criteria_due_date_rb.config(statetk.NORMAL)self.sort_tasks()def set_background_color(self):color colorchooser.askcolor()[1]if color:if hasattr(self, bg_image):del self.bg_imageself.background_label.configure(image)self.root.configure(bgcolor)for widget in self.root.winfo_children():widget_type widget.winfo_class()if widget_type not in (Listbox, Entry, TCombobox, LabelFrame):widget.configure(bgcolor)if isinstance(widget, tk.Scrollbar):widget.configure(troughcolorcolor)self.task_entry.configure(bgwhite)self.due_date_entry.configure(bgwhite)self.ongoing_list.configure(bgwhite)self.completed_list.configure(bgwhite)# 修改 Combobox 样式self.combo_style.configure(Custom.TCombobox, fieldbackgroundwhite, backgroundwhite)def upload_background_image(self):file_path filedialog.askopenfilename(filetypes[(Image Files, *.png *.jpg *.jpeg *.gif *.bmp)])if file_path:try:# 打开图像并删除可能存在的错误 ICC Profileimage Image.open(file_path)if icc_profile in image.info:icc_data image.info.get(icc_profile, b)if icc_data:# 创建一个不带 ICC 的新图像副本image_data list(image.getdata())image Image.new(image.mode, image.size)image.putdata(image_data)self.bg_image image.convert(RGBA)self.update_background_image()self.root.bind(Configure, self.resize_background)except Exception as e:messagebox.showerror(错误, f无法加载背景图: {str(e)})def resize_background(self, eventNone):if hasattr(self, bg_image):resized self.bg_image.resize((self.root.winfo_width(), self.root.winfo_height()), Image.Resampling.LANCZOS)self.bg_photo ImageTk.PhotoImage(resized)self.background_label.configure(imageself.bg_photo)self.background_label.lower()def update_background_image(self):self.resize_background()def reset_background(self):default_color #f0f0f0self.root.configure(bgdefault_color)for widget in self.root.winfo_children():widget_type widget.winfo_class()if widget_type not in (Listbox, Entry, TCombobox, LabelFrame):widget.configure(bgdefault_color)if isinstance(widget, tk.Scrollbar):widget.configure(troughcolordefault_color)self.task_entry.configure(bgwhite)self.due_date_entry.configure(bgwhite)self.ongoing_list.configure(bgwhite)self.completed_list.configure(bgwhite)self.combo_style.configure(Custom.TCombobox, fieldbackgroundwhite, backgroundwhite)if hasattr(self, bg_image):del self.bg_imageself.background_label.configure(image)def on_click(self, event):ongoing_selected self.ongoing_list.nearest(event.y)completed_selected self.completed_list.nearest(event.y)if ongoing_selected 0:task_idx ongoing_selectedif event.x self.checkbox_width * 8:self.toggle_task_status(task_idx, is_ongoingTrue)else:self.select_task(task_idx, is_ongoingTrue)elif completed_selected 0:task_idx completed_selectedif event.x self.checkbox_width * 8:self.toggle_task_status(task_idx, is_ongoingFalse)else:self.select_task(task_idx, is_ongoingFalse)def toggle_task_status(self, index, is_ongoingTrue):if is_ongoing:task_idx indexelse:offset len([t for t in self.tasks if not t[completed]])task_idx offset indexif 0 task_idx len(self.tasks):current_state self.tasks[task_idx][completed]self.tasks[task_idx][completed] not current_stateif self.tasks[task_idx][completed]:self.tasks[task_idx][completion_date] datetime.now().strftime(%Y.%m.%d %H:%M)else:self.tasks[task_idx].pop(completion_date, None)self.update_lists()self.save_tasks()def select_task(self, index, is_ongoingTrue):self.clear_selections()if is_ongoing:self.ongoing_list.select_set(index)else:self.completed_list.select_set(index)def clear_selections(self):self.ongoing_list.select_clear(0, tk.END)self.completed_list.select_clear(0, tk.END)def update_lists(self):self.ongoing_list.delete(0, tk.END)self.completed_list.delete(0, tk.END)for idx, task in enumerate(self.tasks):status [✓] if task[completed] else [ ]name task[name]due_date f {task[due_date]} if task[due_date] else priority f 优先级{task[priority]}create_date f 创建于{task[create_date]}if task[completed]:completion_info f✅ 完成于{task.get(completion_date, )}lines [f{status} {name},f {priority}{due_date},f {create_date},f {completion_info}]self.completed_list.insert(tk.END, \n.join(lines))self.completed_list.itemconfig(tk.END, fg#666666)else:lines [f{status} {name},f {priority}{due_date},f {create_date}]self.ongoing_list.insert(tk.END, \n.join(lines))self.ongoing_list.itemconfig(tk.END, fg#000000)def get_selected_index(self):ongoing_sel self.ongoing_list.curselection()completed_sel self.completed_list.curselection()if ongoing_sel:return ongoing_sel[0], Trueelif completed_sel:return completed_sel[0], Falseelse:messagebox.showwarning(操作错误, 请先选择任务)return None, Nonedef delete_task(self):index, is_ongoing self.get_selected_index()if index is None:returnif is_ongoing:task_idx indexelse:offset len([t for t in self.tasks if not t[completed]])task_idx offset indexdel self.tasks[task_idx]self.update_lists()self.save_tasks()def move_up(self):index, is_ongoing self.get_selected_index()if index is None:returnif is_ongoing and index 0:task_idx indexprev_idx index - 1elif not is_ongoing and index 0:offset len([t for t in self.tasks if not t[completed]])task_idx offset indexprev_idx task_idx - 1else:returnself.tasks[task_idx], self.tasks[prev_idx] self.tasks[prev_idx], self.tasks[task_idx]self.sort_mode.set(custom)self.update_lists()self.save_tasks()def move_down(self):index, is_ongoing self.get_selected_index()if index is None:returnif is_ongoing and index self.ongoing_list.size() - 1:task_idx indexnext_idx index 1elif not is_ongoing and index self.completed_list.size() - 1:offset len([t for t in self.tasks if not t[completed]])task_idx offset indexnext_idx task_idx 1else:returnself.tasks[task_idx], self.tasks[next_idx] self.tasks[next_idx], self.tasks[task_idx]self.sort_mode.set(custom)self.update_lists()self.save_tasks()def add_task(self):task_name self.task_entry.get().strip()priority self.priority_combo.get().strip()due_date self.due_date_entry.get().strip()create_date datetime.now().strftime(%Y.%m.%d %H:%M)if not self.validate_input(task_name, priority, due_date):returnnew_task {name: task_name,priority: int(priority),create_date: create_date,due_date: self.format_due_date(due_date),completed: False}if self.sort_mode.get() manual:self.tasks.insert(0, new_task)self.custom_order.insert(0, 0)else:self.insert_sorted(new_task)self.update_lists()self.save_tasks()self.clear_inputs()def validate_input(self, name, priority, due_date):if not name:messagebox.showwarning(错误, 请输入任务名称)return Falsetry:if not 1 int(priority) 5:raise ValueErrorexcept ValueError:messagebox.showwarning(错误, 优先级必须是1-5的整数)return Falseif due_date and not self.is_valid_date(due_date):messagebox.showwarning(错误, 日期格式无效请使用 yyyy.mm.dd 格式)return Falsereturn Truedef is_valid_date(self, date_str):try:datetime.strptime(date_str, %Y.%m.%d)return Trueexcept ValueError:return Falsedef format_due_date(self, date_str):if not date_str:return try:return datetime.strptime(date_str, %Y.%m.%d).strftime(%Y.%m.%d)except:return def insert_sorted(self, new_task):criteria self.sort_criteria.get()insert_pos 0for idx, task in enumerate(self.tasks):if task[completed]:breakif criteria priority:if new_task[priority] task[priority]:breakelif new_task[priority] task[priority]:if (new_task[due_date] or 9999.99.99) (task[due_date] or 9999.99.99):breakelif criteria due_date:if (new_task[due_date] or 9999.99.99) (task[due_date] or 9999.99.99):breakelif new_task[due_date] task[due_date]:if new_task[priority] task[priority]:breakinsert_pos 1self.tasks.insert(insert_pos, new_task)def sort_tasks(self):if self.sort_mode.get() ! auto:returnongoing_tasks [t for t in self.tasks if not t[completed]]completed_tasks [t for t in self.tasks if t[completed]]criteria self.sort_criteria.get()if criteria priority:ongoing_tasks.sort(keylambda x: (-x[priority], x[due_date] or 9999.99.99))elif criteria due_date:ongoing_tasks.sort(keylambda x: (x[due_date] or 9999.99.99, -x[priority]))self.tasks ongoing_tasks completed_tasksself.sync_custom_order()self.update_lists()def sync_custom_order(self):self.custom_order list(range(len(self.tasks)))def clear_inputs(self):self.task_entry.delete(0, tk.END)self.priority_combo.set()self.due_date_entry.delete(0, tk.END)def save_tasks(self):try:data {tasks: self.tasks,sort_mode: self.sort_mode.get(),sort_criteria: self.sort_criteria.get(),custom_order: self.custom_order}with open(self.data_file, w, encodingutf-8) as f:json.dump(data, f, ensure_asciiFalse, indent2)except Exception as e:messagebox.showwarning(保存错误, f数据保存失败: {str(e)})def load_tasks(self):try:if self.data_file.exists():with open(self.data_file, r, encodingutf-8) as f:data json.load(f)self.tasks data.get(tasks, [])self.sort_mode.set(data.get(sort_mode, auto))self.sort_criteria.set(data.get(sort_criteria, priority))if self.sort_mode.get() manual and custom_order in data:self.custom_order data.get(custom_order)else:self.sort_tasks()except Exception as e:messagebox.showwarning(加载错误, f数据加载失败: {str(e)})self.tasks []self.custom_order []def show_context_menu(self, event):menu tk.Menu(self.root, tearoff0)menu.add_command(label删除任务, commandself.delete_task)menu.add_command(label置顶, commandlambda: self.move_to_top(event))ongoing_selected self.ongoing_list.nearest(event.y)completed_selected self.completed_list.nearest(event.y)if completed_selected 0:task_idx len([t for t in self.tasks if not t[completed]]) completed_selectedif self.tasks[task_idx][completed]:menu.add_command(label撤销完成, commandlambda: self.undo_complete_task(task_idx))try:menu.tk_popup(event.x_root, event.y_root)finally:menu.grab_release()def move_to_top(self, event):passdef undo_complete_task(self, task_idx):if 0 task_idx len(self.tasks):self.tasks[task_idx][completed] Falseself.tasks[task_idx].pop(completion_date, None)self.update_lists()self.save_tasks()def on_close(self):self.save_tasks()self.root.destroy()if name main:root tk.Tk()root.geometry(1000x700)root.configure(bg#f0f0f0)root.resizable(True, True)app AdvancedTaskManager(root)root.mainloop()演示如下 秒序任务待办清单 憧憬 在过去的 256 天里我深刻领悟到成为一个真正的 技术高手 并不是靠追求复杂性和华丽的技巧而是将基础概念理解得非常透彻并且能够将其应用于实际场景中。从最简单的 range(1, 10, 2) 中延伸出 步长在数据采样中的应用让我感到比运行复杂神经网络更有成就感。这种能够将抽象编程概念转化为通俗易懂生活场景的能力正是我未来想要继续专注的方向。 我愿意将自己定位为基础技术的 解读者致力于将那些看似晦涩难懂的概念转化为人人皆可理解的形式让更多初学者在编程的学习起点就能看到技术之树的延伸方向。我相信只有打好扎实的基础才能在技术的道路上走得更远。 最后我要衷心感谢每一位在评论区留下足迹的读者。正是因为有了你们的反馈和支持这些关于基础技术的内容才变得生动有趣。我希望我们在代码的世界里每一个 print、每一个循环都能成为通往技术深处的路标引领更多人走进编程的奇妙世界。未来的每一天让我们一起努力共同成长共同探索让技术之树在我们手中茁壮成长
相关文章
-
赣州做网站的公司有哪家做网站 我们的工人怎么写
赣州做网站的公司有哪家做网站 我们的工人怎么写
- 技术栈
- 2026年03月21日
-
赣州做网站的公司有哪家手机画设计图软件
赣州做网站的公司有哪家手机画设计图软件
- 技术栈
- 2026年03月21日
-
赣州做网站jx25intitle:网站建设
赣州做网站jx25intitle:网站建设
- 技术栈
- 2026年03月21日
-
刚成立的公司怎样做自己网站聊城城乡建设局网站
刚成立的公司怎样做自己网站聊城城乡建设局网站
- 技术栈
- 2026年03月21日
-
刚做网站做什么网站好点南京网站设计公司
刚做网站做什么网站好点南京网站设计公司
- 技术栈
- 2026年03月21日
-
钢材贸易网站建设学推广网络营销去哪里
钢材贸易网站建设学推广网络营销去哪里
- 技术栈
- 2026年03月21日






