37创客科创中心

 找回密码
 立即注册
查看: 1379|回复: 3

文田 宋庆龄发明奖

  [复制链接]

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
发表于 2024-12-26 16:52:27 | 显示全部楼层 |阅读模式


国赛入围:

APP250413文件


250406示例程序



分享名称:文田班
分享链接:https://p.37ck.cn/#s/996eqfig


2025第20届
https://p.37ck.cn/#s/_Wt0IoaQ



填写样式申请表
人工智能

发明作品


申报表格下载

发明作品

人工智能


创意作品



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-12-29 11:02:01 | 显示全部楼层


app_ttk_ui.py
  1. import ttkbootstrap as ttk
  2. from ttkbootstrap.constants import *
  3. from ttkbootstrap.dialogs import Messagebox
  4. import sqlite3
  5. # from EXT_XKB_BT import *

  6. class DBINIT:
  7.     def __init__(self, root, title, idb):
  8.         self.root = root
  9.         self.root.title(title)
  10.         # self.root.geometry("800x600")
  11.         # 创建数据库连接
  12.         self.conn = sqlite3.connect(idb)
  13.         self.create_table()
  14.         # 创建主框架
  15.         self.create_main_frame()

  16.         # 创建界面元素
  17.         self.create_toolbar()  # 工具栏和搜索框
  18.         self.create_input_area()  # 输入区域和增删改查按钮
  19.         self.create_table_view()  # 数据表格
  20.         # 显示初始数据
  21.         # self.show_records()


  22. class DBUI(DBINIT):

  23.     def create_main_frame(self):
  24.         self.main_frame = ttk.Frame(self.root, padding="10")
  25.         self.main_frame.pack(fill=BOTH, expand=YES)
  26.         self.root.geometry("800x600")

  27.     def create_toolbar(self):
  28.         toolbar = ttk.Frame(self.main_frame)
  29.         toolbar.pack(fill=X, pady=(0, 10))

  30.         # 主题选择下拉框
  31.         themes = ttk.Style().theme_names()
  32.         self.theme_var = ttk.StringVar(value=ttk.Style().theme.name)
  33.         theme_menu = ttk.Menubutton(toolbar, text="切换主题", bootstyle=OUTLINE)
  34.         theme_menu.pack(side=LEFT, padx=5)

  35.         inner_menu = ttk.Menu(theme_menu)
  36.         theme_menu['menu'] = inner_menu

  37.         for theme in themes:
  38.             inner_menu.add_radiobutton(
  39.                 label=theme,
  40.                 value=theme,
  41.                 variable=self.theme_var,
  42.                 command=self.change_theme
  43.             )

  44.         # 搜索框
  45.         self.search_var = ttk.StringVar()
  46.         search_entry = ttk.Entry(toolbar, textvariable=self.search_var)
  47.         search_entry.pack(side=RIGHT, padx=5)

  48.         search_btn = ttk.Button(
  49.             toolbar,
  50.             text="搜索",
  51.             command=self.search_records,
  52.             bootstyle=INFO
  53.         )
  54.         search_btn.pack(side=RIGHT)


  55.     def clear_entries(self):
  56.         self.name_entry.delete(0, END)
  57.         self.age_entry.delete(0, END)
  58.         self.email_entry.delete(0, END)
  59.         self.search_var.set("")

  60.     def item_selected(self, event):
  61.         selected = self.tree.selection()
  62.         if selected:
  63.             values = self.tree.item(selected)['values']
  64.             self.clear_entries()
  65.             self.name_entry.insert(0, values[1])
  66.             self.age_entry.insert(0, values[2])
  67.             self.email_entry.insert(0, values[3])

  68.     def create_table_view(self):
  69.         # 创建表格框架
  70.         table_frame = ttk.LabelFrame(
  71.             self.main_frame,
  72.             text="数据显示",
  73.             padding="15"
  74.         )
  75.         table_frame.pack(fill=BOTH, expand=YES)

  76.         # 创建表格和滚动条
  77.         columns = ("编号", "名字", "年龄", "邮箱", "创建时间")
  78.         self.tree = ttk.Treeview(
  79.             table_frame,
  80.             columns=columns,
  81.             show="headings",
  82.             bootstyle=INFO
  83.         )

  84.         # 设置列
  85.         for col in columns:
  86.             self.tree.heading(col, text=col)
  87.             self.tree.column(col, width=130)

  88.         # 添加滚动条
  89.         scrollbar = ttk.Scrollbar(
  90.             table_frame,
  91.             orient=VERTICAL,
  92.             command=self.tree.yview
  93.         )
  94.         self.tree.configure(yscrollcommand=scrollbar.set)

  95.         # 放置表格和滚动条
  96.         self.tree.pack(side=LEFT, fill=BOTH, expand=YES)
  97.         scrollbar.pack(side=RIGHT, fill=Y)

  98.         # 绑定选择事件
  99.         self.tree.bind('<<TreeviewSelect>>', self.item_selected)

  100.     def change_theme(self):
  101.         ttk.Style().theme_use(self.theme_var.get())


  102. class UDB(DBUI):
  103.     # def __init__(self, root, title, idb,name):
  104.     #     self.mgdb = 'mgdb'
  105.     #     self.name = name


  106.     def show_records(self):
  107.         for item in self.tree.get_children():
  108.             self.tree.delete(item)
  109.         cursor = self.conn.cursor()
  110.         cursor.execute("SELECT * FROM users")
  111.         records = cursor.fetchall()
  112.         for record in records:
  113.             self.tree.insert("", END, values=record)

  114.     def search_records(self):
  115.         search_term = self.search_var.get()

  116.         for item in self.tree.get_children():
  117.             self.tree.delete(item)

  118.         cursor = self.conn.cursor()
  119.         cursor.execute("""
  120.                SELECT * FROM users
  121.                WHERE name LIKE ? OR email LIKE ?
  122.            """, (f'%{search_term}%', f'%{search_term}%'))

  123.         records = cursor.fetchall()
  124.         for record in records:
  125.             self.tree.insert("", END, values=record)

  126.     def create_table(self):
  127.         cursor = self.conn.cursor()
  128.         cursor.execute('''
  129.             CREATE TABLE IF NOT EXISTS users (
  130.                 id INTEGER PRIMARY KEY AUTOINCREMENT,
  131.                 name TEXT NOT NULL,
  132.                 age INTEGER,
  133.                 email TEXT,
  134.                 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  135.             )
  136.         ''')
  137.         self.conn.commit()

  138.     def create_input_area(self):
  139.         input_frame = ttk.LabelFrame(
  140.             self.main_frame,
  141.             text="数据输入",
  142.             padding="10"
  143.         )
  144.         input_frame.pack(fill=X, pady=(0, 10))

  145.         # 创建输入字段
  146.         fields_frame = ttk.Frame(input_frame)
  147.         fields_frame.pack(fill=X)

  148.         # 姓名输入
  149.         name_label = ttk.Label(fields_frame, text="姓名:")
  150.         name_label.grid(row=0, column=0, padx=5, pady=5)
  151.         self.name_entry = ttk.Entry(fields_frame)
  152.         self.name_entry.grid(row=0, column=1, padx=5, pady=5)

  153.         # 年龄输入
  154.         age_label = ttk.Label(fields_frame, text="年龄:")
  155.         age_label.grid(row=0, column=2, padx=5, pady=5)
  156.         self.age_entry = ttk.Entry(fields_frame)
  157.         self.age_entry.grid(row=0, column=3, padx=5, pady=5)

  158.         # 邮箱输入
  159.         email_label = ttk.Label(fields_frame, text="邮箱:")
  160.         email_label.grid(row=0, column=4, padx=5, pady=5)
  161.         self.email_entry = ttk.Entry(fields_frame)
  162.         self.email_entry.grid(row=0, column=5, padx=5, pady=5)

  163.         # 按钮区域
  164.         btn_frame = ttk.Frame(input_frame)
  165.         btn_frame.pack(fill=X, pady=(10, 0))

  166.         ttk.Button(
  167.             btn_frame,
  168.             text="添加",
  169.             command=self.add_record,
  170.             bootstyle=SUCCESS
  171.         ).pack(side=RIGHT, padx=5)

  172.         ttk.Button(
  173.             btn_frame,
  174.             text="更新",
  175.             command=self.update_record,
  176.             bootstyle=WARNING
  177.         ).pack(side=RIGHT, padx=5)

  178.         ttk.Button(
  179.             btn_frame,
  180.             text="删除",
  181.             command=self.delete_record,
  182.             bootstyle=DANGER
  183.         ).pack(side=RIGHT, padx=5)

  184.         ttk.Button(
  185.             btn_frame,
  186.             text="清空",
  187.             command=self.clear_entries,
  188.             bootstyle=SECONDARY
  189.         ).pack(side=RIGHT, padx=5)
  190.         ttk.Button(
  191.             btn_frame,
  192.             text="MQTT",
  193.             command=bt_13,
  194.             bootstyle=PRIMARY
  195.         ).pack(side=LEFT, padx=5)
  196.         ttk.Button(
  197.             btn_frame,
  198.             text="发送siot1",
  199.             command=bt_12,
  200.             bootstyle=SUCCESS
  201.         ).pack(side=LEFT, padx=5)
  202.         ttk.Button(
  203.             btn_frame,
  204.             text="发送siot2",
  205.             command=bt_11,
  206.             bootstyle=DARK
  207.         ).pack(side=LEFT, padx=5)

  208.     def add_record(self):
  209.         name = self.name_entry.get()
  210.         age = self.age_entry.get()
  211.         email = self.email_entry.get()

  212.         if name and age and email:
  213.             try:
  214.                 cursor = self.conn.cursor()
  215.                 cursor.execute(
  216.                     "INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
  217.                     (name, age, email)
  218.                 )
  219.                 self.conn.commit()
  220.                 self.show_records()
  221.                 self.clear_entries()
  222.                 Messagebox.show_info("记录添加成功!", "成功")
  223.             except Exception as e:
  224.                 Messagebox.show_error(f"添加失败:{str(e)}", "错误")
  225.         else:
  226.             Messagebox.show_warning("请填写所有字段!", "警告")

  227.     def update_record(self):
  228.         selected = self.tree.selection()
  229.         if not selected:
  230.             Messagebox.show_warning("请先选择一条记录!", "警告")
  231.             return

  232.         name = self.name_entry.get()
  233.         age = self.age_entry.get()
  234.         email = self.email_entry.get()

  235.         if name and age and email:
  236.             try:
  237.                 item_id = self.tree.item(selected)['values'][0]
  238.                 cursor = self.conn.cursor()
  239.                 cursor.execute(
  240.                     "UPDATE users SET name=?, age=?, email=? WHERE id=?",
  241.                     (name, age, email, item_id)
  242.                 )
  243.                 self.conn.commit()
  244.                 self.show_records()
  245.                 self.clear_entries()
  246.                 Messagebox.show_info("记录更新成功!", "成功")
  247.             except Exception as e:
  248.                 Messagebox.show_error(f"更新失败:{str(e)}", "错误")
  249.         else:
  250.             Messagebox.show_warning("请填写所有字段!", "警告")

  251.     def delete_record(self):
  252.         selected = self.tree.selection()
  253.         if not selected:
  254.             Messagebox.show_warning("请先选择一条记录!", "警告")
  255.             return

  256.         if Messagebox.show_question("确定要删除这条记录吗?", "确认"):
  257.             try:
  258.                 item_id = self.tree.item(selected)['values'][0]
  259.                 cursor = self.conn.cursor()
  260.                 cursor.execute("DELETE FROM users WHERE id=?", (item_id,))
  261.                 self.conn.commit()
  262.                 self.show_records()
  263.                 self.clear_entries()
  264.                 Messagebox.show_info("记录删除成功!", "成功")
  265.             except Exception as e:
  266.                 Messagebox.show_error(f"删除失败:{str(e)}", "错误")


  267. if __name__ == "__main__":
  268.     root = ttk.Window(themename="cyborg")
  269.     # app = DatabaseManager(title="37创客sqlite数据库管理系统", root=root)
  270.     # app = DatabaseManager(root,title="37创客sqlite数据库管理系统")
  271.     app = UDB(root, "37创客sqlite数据库管理系统", 'tk.db')
  272.     app.show_records()
  273.     root.mainloop()
复制代码

EXT_CB.py
  1. # 事件回调函数

  2. def bt_11():
  3.     print('bt_11')
  4.     return '11'
  5. def bt_12():
  6.     print('bt_12')
  7.     return '12'
  8. def bt_13():
  9.     return '13'
  10. def bt_14():
  11.     return '14'
  12. def bt_21():
  13.     return '21'
  14. def bt_22():
  15.     return '22'
  16. def bt_23():
  17.     return '23'
  18. def bt_24():
  19.     return '24'
  20. def bt_31():
  21.     return '31'
  22. def bt_32():
  23.     return '32'
  24. def bt_33():
  25.     return '33'
  26. def bt_34():
  27.     return '34'

  28. def on_0_key():
  29.     print('on_0_key')
  30. def on_1_key():
  31.     print('on_1_key')
  32. def on_2_key():
  33.     print('on_2_key')
  34. def on_3_key():
  35.     print('on_3_key')
  36. def on_4_key():
  37.     print('on_4_key')
  38. def on_5_key():
  39.     print('on_5_key')
  40. def on_6_key():
  41.     print('on_6_key')
  42. def on_7_key():
  43.     print('on_7_key')
  44. def on_8_key():
  45.     print('on_8_key')
  46. def on_9_key():
  47.     print('on_9_key')

复制代码





appui.py

  1. #  -*- coding: UTF-8 -*-
  2. import json
  3. from unihiker import GUI
  4. from EXT_XKB_BT import *
  5. from UI_VAR import *

  6. # 自定义函数
  7. def FUN_TuPian(MingZi, HanShu, WenJian, X, Y, W, H):
  8.     MingZi = u_gui.draw_image(image=WenJian, x=X, y=Y)
  9.     MingZi.config(h=H)
  10.     MingZi.config(w=W)
  11.     MingZi.config(onclick=HanShu)

  12. def GetKD(Jian):
  13.     if (G_User == 1):
  14.         return Dujson(G_CFG, Jian)
  15.     else:
  16.         return (str(G_QianZhui) + str(Dujson(G_CFG, Jian)))


  17. def FUN_GTuPian(_1, _2, _3, _4, X, Y, W, H, BT1, BT2, BT3, BT4):
  18.     if bool(BT1):
  19.         FUN_TuPian(_1, BT1, _1, X, Y, W, H)
  20.     if bool(BT2):
  21.         FUN_TuPian(_2, BT2, _2, ((W * 1) + X), Y, W, H)
  22.     if bool(BT3):
  23.         FUN_TuPian(_3, BT3, _3, ((W * 2) + X), Y, W, H)
  24.     if bool(BT4):
  25.         FUN_TuPian(_4, BT4, _4, ((W * 3) + X), Y, W, H)


  26. def Dujson(FJson, K):
  27.     fileObj = open(FJson, "r", encoding="UTF8")
  28.     pyObj = json.loads(fileObj.read())
  29.     fileObj.close()
  30.     G_KEY = pyObj
  31.     return (G_KEY[K])


  32. def FUN_CaoZuo():
  33.     FUN_GTuPian('ui/11.png', '遥控/前进.jpg', 'ui/fy.png', 'ui/yy.png', GetKD('x'), GetKD('y'), GetKD('宽'),
  34.                 GetKD('高'), False, 0, bt_11, bt_11)
  35.     FUN_GTuPian(GetKD('bt_11'), GetKD('bt_12'), GetKD('bt_13'), GetKD('bt_14'), GetKD('x'), (GetKD('y') + 50),
  36.                 GetKD('宽'), GetKD('高'), bt_11, bt_12, bt_13, bt_14)
  37.     FUN_GTuPian(GetKD('bt_21'), GetKD('bt_22'), GetKD('bt_23'), GetKD('bt_24'), GetKD('x'), (GetKD('y') + 90),
  38.                 GetKD('宽'), GetKD('高'), bt_21, bt_22, bt_23, bt_24)
  39.     FUN_GTuPian(GetKD('bt_31'), GetKD('bt_32'), GetKD('bt_33'), GetKD('bt_34'), GetKD('x'), (GetKD('y') + 130),
  40.                 GetKD('宽'), GetKD('高'), bt_31, bt_32, bt_33, bt_34)


  41. def fun_TouBu(XiangMuMing, BeiJingTu):
  42.     bj = u_gui.draw_image(image=BeiJingTu, x=0, y=0)
  43.     项目名字 = u_gui.draw_text(text=XiangMuMing, x=60, y=0, font_size=18, color="#000066")
  44.     动态 = u_gui.draw_text(text="实时消息", x=5, y=30, font_size=10, color="#FF0000")
  45.     u_gui.draw_round_rect(x=2, y=75, w=235, h=130, r=5, width=3, color="#FF0000")


  46. def fun_DiBu():
  47.     u_gui.draw_round_rect(x=0, y=210, w=235, h=105, r=5, width=3, color="#FF0000")
  48.     msg = u_gui.draw_text(text="动态:项目启动", x=3, y=215, font_size=11, color="#0000FF")
  49.     编号 = u_gui.draw_text(text="编号:20241101", x=3, y=230, font_size=11, color="#FF0000")
  50.     情况 = u_gui.draw_text(text="情况:启动完成", x=3, y=245, font_size=11, color="#0000FF")
  51.     操作 = u_gui.draw_text(text="操作:初始化", x=3, y=260, font_size=11, color="#FF0000")
  52.     实时 = u_gui.draw_text(text="状态:init ok", x=3, y=275, font_size=11, color="#0000FF")
  53.     卡号 = u_gui.draw_text(text="卡号:20200808", x=3, y=295, font_size=11, color="#FF0000")
  54.     TouXiang()


  55. def TouXiang():
  56.     头像 = u_gui.draw_image(image=GetKD('默认图片'), x=130, y=215)
  57.     头像.config(h=100)
  58.     头像.config(w=100)


  59. def UIinit(iname, ibg):
  60.     fun_TouBu(iname, ibg)
  61.     FUN_CaoZuo()
  62.     fun_DiBu()


  63. # u_gui = GUI()
  64. # G_QianZhui = 'wt'
  65. # G_CFG = 'config.txt'
  66. # G_User = 1
  67. # fun_TouBu('项目名称', 'BG/bj.png')
  68. # FUN_CaoZuo()
  69. UIinit('37创客PY作品', 'BG/bj.png')
  70. while True:
  71.     pass
复制代码


回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-12-29 11:02:39 | 显示全部楼层
UI_VAR.py

  1. from unihiker import GUI
  2. # 定义全局变量
  3. global 编号
  4. global 情况
  5. global 操作
  6. global 实时
  7. global 卡号
  8. global 头像
  9. global G_TOPIC
  10. global 动态
  11. global bj

  12. G_QianZhui = 'wt'
  13. G_CFG = 'config.txt'
  14. G_User = 1

  15. u_gui = GUI() # 创建GUI对象

复制代码


回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-12-29 11:03:14 | 显示全部楼层
EXT_XKB_BT.py


  1. # 事件回调函数
  2. # QieHuanTouXiang(GetKD('bt_11'), 头像, 0)
  3. # fun_DongTai(FaSong(GetKD('bt_11N'), G_TOPIC))
  4. def bt_11():
  5.     return '11'


  6. def bt_12():
  7.     return '12'


  8. def bt_13():
  9.     return '13'


  10. def bt_14():
  11.     return '14'


  12. def bt_21():
  13.     return '21'


  14. def bt_22():
  15.     return '22'


  16. def bt_23():
  17.     return '23'


  18. def bt_24():
  19.     return '24'


  20. def bt_31():
  21.     return '31'


  22. def bt_32():
  23.     return '32'


  24. def bt_33():
  25.     return '33'


  26. def bt_34():
  27.     return '34'

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|37创客科创中心

GMT+8, 2025-12-10 04:11 , Processed in 0.176052 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表