用tkinter+sqlite3做了一个出勤记录小工具

在这里插入图片描述
在这里插入图片描述

pack()

  1. pack()这个布局方式非常不友好,最后菜菜用了11个Frame互相嵌套 ↑

  2. 写了很多罗里吧嗦的字符串操作语句来保证这些输入框不会报错:

     string.replace('需要替换的字符','new')
     string.strip('需要删去的首尾字符')
     string.split('分隔符',分割次数)
     string.isdigit() 判断输入的是否是纯数字
     list=[str(i) for i in list0] 先把列表list0每一项都变为字符串
     ''.join(list) 再把列表拼接为字符串
    
  3. 可以实时更新显示的Listbox和Label

     x=tkinter.StringVar()
     tkinter.Listbox(self,listvariable=x).pack()
     x.set('更新的字符串')
    
  4. 获取、清除输入框Entry的内容:

     entry.get()   或者在类外调用时须加名字前缀: app.entry.get()
     entry.delete(0,END)   或者在类外调用时须加名字前缀: app.entry.delete(0,END) 
    
  5. 注意None和空字符并不等价~;

     '+'.split('+') 的结果是 ['', '']
    
  6. cursor.fetchone()和fetchall()返回的都是列表,列表中是元组,形如[(1, ‘a’, 13, 13), (2, ‘c’, 4, 4), (3, ‘a’, 2, 2)],如果没有查询到结果则会返回None;

  7. 复习了很多已经快忘光的sql语句:

     group by, having count(*)>2, update, delete, insert or ignore, inner join
    
  8. 菜菜第一次写了400行的python……第一次用了global变量…还挺好用的… https://www.cnblogs.com/z360519549/p/5172020.html
    这两篇…↑…↓…也不晓得谁是原作者了……
    https://blog.youkuaiyun.com/qw_sunny/article/details/80972357

全部代码 ↓

import tkinter as tk
from tkinter.constants import * #这一行是为了方便pack()中的特殊字符输入,比如TOP,RIGHT,LEFT
import sqlite3

class Application(tk.Frame):  # 继承自父类Frame
    def __init__(self, master=None):  # 初始化,  master: 按钮的父容器    
        super().__init__(master)# 重写父类的初始化 https://blog.youkuaiyun.com/m0_37310097/article/details/75305015
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        #所有带格式条件的输入,最好增加一个报错机制
        #所有带格式条件的输入,最好增加一个报错机制
        #所有带格式条件的输入,最好增加一个报错机制 try,except
        f1=tk.Frame(self)
        f1.pack()
        f2=tk.Frame(f1)
        f2.pack(side=LEFT)
        self.label1=tk.Label(f2,text='请输入课程ID(+课程内容):') #可引入时间,比如1a、1b、1c表示第一节课的上午班、下午班、晚班
                                                               # 允许不输入课程内容
        self.label1.pack(anchor=W)
        self.course = tk.Entry(f2)
        self.course.pack(anchor=W)
        tk.Message(f2,text='↑可单独录入课程信息',fg='#808080',width=250).pack(anchor=W)
        
        self.label2=tk.Label(f2,text='请输入出席学生ID:空格相隔') #在屏幕上显示学生名单(ID-名字),方便老师输入ID而非名字
                                                                            #如果有第一次来试听的学生,请先在add输入框内为他分配ID和1个课时
                                                                            #允许不输入出席学生ID,这样的话就只更新课程信息
                                                                            #如果要删除某个学生的某次出勤记录,则输入负的学生ID,但每次只能输入一个 
        self.label2.pack(anchor=W)
        self.attendee = tk.Entry(f2)
        self.attendee.pack(anchor=W)
        
        
        f3=tk.Frame(f1)
        f3.pack(side=LEFT,padx=20)
        self.record=tk.Button(f3,text='  记录  ',command=record_db)
        self.record.pack(side=LEFT)

        f4=tk.Frame(self)
        f4.pack()
        tk.Message(f4,text='*如果要删除某个学生某次出勤记录,则输入负的学生ID,但每次只能输入一个ID,eg.-1',fg='#808080',width=250).pack(anchor=W)
        
        f5=tk.Frame(self)
        f5.pack(pady=20,ipadx=50)
        f8=tk.Frame(f5)
        f8.pack(side=BOTTOM,anchor=E)
        f6=tk.Frame(f5)
        f6.pack(side=LEFT)
        self.label3=tk.Label(f6,text='请输入某个学生的ID:') #在屏幕上显示学生名单(ID-名字),方便老师输入ID而非名字                                       
        self.label3.pack()
        self.astudent=tk.Entry(f6)
        self.astudent.pack()
        
        self.consultStu = tk.Button(f6)
        self.consultStu["text"] = "  查询学生出勤记录  "
        self.consultStu["command"] = consultStu
        self.consultStu.pack(pady=5)

        f7=tk.Frame(f5)
        f7.pack(side=RIGHT)
        self.label4=tk.Label(f7,text='请输入某节课程的ID:') #在屏幕上显示课程列表(ID-内容),方便老师输入ID
        self.label4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值