第六篇【传奇开心果系列】Python微项目技术点案例示例:庖丁解牛tkinter.ttk库gui界面编程

news2024/12/26 22:30:00

传奇开心果微博系列

  • 系列微博目录
    • Python微项目技术点案例示例系列
  • 微博目录
    • 前言
    • 一、主窗口和子窗口创建和切换,以员工信息管理系统示例代码
    • 二、主窗口添加有菜单项图标的菜单栏、工具栏和右键菜单示例代码
    • 三、使用sqlite3数据库增删改查管理员工信息示例代码
    • 四、在主界面增加增删改查实现相关功能,创建增删改查显示子窗口示例代码
    • 五、增加模糊查询功能示例代码
    • 六、增加登录验证功能示例代码
    • 七、增加权限控制示例代码
    • 八、实现比较完整漂亮美观的员工管理信息系统示例代码
    • 九、归纳总结

系列微博目录

Python微项目技术点案例示例系列

微博目录

前言

在这里插入图片描述Tkinter.ttk是一个用于创建现代化用户界面的Tkinter的扩展模块。它提供了一组新的小部件,这些小部件具有更好的外观和功能,可以让您创建更具吸引力和专业的界面。
Tkinter.ttk提供的小部件包括按钮、标签、进度条、滚动条、树状视图等,这些小部件与标准的Tkinter小部件相比具有更丰富的样式和主题选项。此外,Tkinter.ttk还提供了一些额外的功能,如内置的主题支持、状态指示器、键盘导航等,使得界面设计更加灵活和易用。
总的来说,Tkinter.ttk是一个强大的工具,可以帮助您创建更加现代化和专业的用户界面,提升用户体验和界面设计的质量。

一、主窗口和子窗口创建和切换,以员工信息管理系统示例代码

在这里插入图片描述在Tkinter中,可以使用ttk模块创建主窗口和子窗口,并实现它们之间的切换。下面是一个示例代码,演示了如何创建一个简单的员工信息管理系统,包括主窗口和子窗口的创建和切换:

import tkinter as tk
from tkinter import ttk

def show_add_employee_window():
    add_employee_window = tk.Toplevel(root)
    add_employee_window.title("Add Employee")
    add_employee_window.geometry("200x100")
    
    label = ttk.Label(add_employee_window, text="Enter employee name:")
    label.pack()
    
    entry = ttk.Entry(add_employee_window)
    entry.pack()
    
    button = ttk.Button(add_employee_window, text="Add Employee")
    button.pack()
    
def show_main_window():
    main_window = tk.Toplevel(root)
    main_window.title("Employee Management System")
    main_window.geometry("300x200")
    
    label = ttk.Label(main_window, text="Welcome to the Employee Management System")
    label.pack()
    
    button = ttk.Button(main_window, text="Add Employee", command=show_add_employee_window)
    button.pack()

root = tk.Tk()
root.title("Employee Management System")
root.geometry("400x300")

show_main_window()

root.mainloop()

在这个示例代码中,首先创建了一个主窗口root,并调用show_main_window()函数显示主窗口内容。在主窗口中,有一个欢迎信息和一个“Add Employee”按钮,点击按钮会调用show_add_employee_window()函数显示一个子窗口用于添加员工信息。

show_add_employee_window()函数创建一个子窗口add_employee_window,包含一个标签、一个输入框和一个按钮,用于输入员工姓名并添加到系统中。

通过这种方式,可以实现主窗口和子窗口之间的切换,从而实现员工信息管理系统的功能。您可以根据需要进一步扩展和优化这个示例代码。

二、主窗口添加有菜单项图标的菜单栏、工具栏和右键菜单示例代码

在这里插入图片描述
在这里插入图片描述在这里插入图片描述以下是一个示例代码,演示了如何在Tkinter的主窗口中添加带有菜单项图标的菜单栏、工具栏和右键菜单:

import tkinter as tk
from tkinter import ttk

def on_right_click(event):
    right_click_menu.post(event.x_root, event.y_root)

root = tk.Tk()
root.title("Menu Example")
root.geometry("400x300")

# 创建菜单栏
menu_bar = tk.Menu(root)

# 创建文件菜单
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="New", compound=tk.LEFT, image=None)
file_menu.add_command(label="Open", compound=tk.LEFT, image=None)
file_menu.add_separator()
file_menu.add_command(label="Exit", compound=tk.LEFT, image=None, command=root.quit)
menu_bar.add_cascade(label="File", menu=file_menu)

root.config(menu=menu_bar)

# 创建工具栏
tool_bar = ttk.Frame(root)
tool_bar.pack(side=tk.TOP, fill=tk.X)

new_button = ttk.Button(tool_bar, text="New", compound=tk.LEFT, image=None)
new_button.pack(side=tk.LEFT)
open_button = ttk.Button(tool_bar, text="Open", compound=tk.LEFT, image=None)
open_button.pack(side=tk.LEFT)
exit_button = ttk.Button(tool_bar, text="Exit", compound=tk.LEFT, image=None, command=root.quit)
exit_button.pack(side=tk.LEFT)

# 创建右键菜单
right_click_menu = tk.Menu(root, tearoff=0)
right_click_menu.add_command(label="Cut")
right_click_menu.add_command(label="Copy")
right_click_menu.add_command(label="Paste")

root.bind("<Button-3>", on_right_click)

root.mainloop()

在这个示例代码中,首先创建了一个主窗口root,并添加了一个带有菜单项图标的菜单栏、工具栏和右键菜单。菜单栏包括一个文件菜单,工具栏包括三个按钮(New、Open、Exit),右键菜单包括三个选项(Cut、Copy、Paste)。

在右键菜单部分,通过绑定鼠标右键事件""来触发右键菜单的显示。当用户在主窗口上右键单击时,右键菜单会在鼠标位置显示出来。

您可以根据需要进一步扩展和优化这个示例代码,以满足您的具体需求。

三、使用sqlite3数据库增删改查管理员工信息示例代码

在这里插入图片描述以下是一个示例代码,演示了如何使用SQLite3数据库来增加、删除、修改和查询员工信息的功能:

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('employee.db')
c = conn.cursor()

# 创建员工表
c.execute('''CREATE TABLE IF NOT EXISTS employees
             (id INTEGER PRIMARY KEY, name TEXT, position TEXT, department TEXT)''')

# 添加员工信息
def add_employee(name, position, department):
    c.execute("INSERT INTO employees (name, position, department) VALUES (?, ?, ?)", (name, position, department))
    conn.commit()
    print("Employee added successfully")

# 删除员工信息
def delete_employee(employee_id):
    c.execute("DELETE FROM employees WHERE id=?", (employee_id,))
    conn.commit()
    print("Employee deleted successfully")

# 更新员工信息
def update_employee(employee_id, name, position, department):
    c.execute("UPDATE employees SET name=?, position=?, department=? WHERE id=?", (name, position, department, employee_id))
    conn.commit()
    print("Employee updated successfully")

# 查询所有员工信息
def get_all_employees():
    c.execute("SELECT * FROM employees")
    employees = c.fetchall()
    for employee in employees:
        print(employee)

# 添加员工信息
add_employee("John Doe", "Manager", "Sales")

# 查询所有员工信息
get_all_employees()

# 更新员工信息
update_employee(1, "John Smith", "Senior Manager", "Sales")

# 查询所有员工信息
get_all_employees()

# 删除员工信息
delete_employee(1)

# 查询所有员工信息
get_all_employees()

# 关闭数据库连接
conn.close()

在这个示例代码中,首先连接到名为employee.db的SQLite数据库,并创建了一个名为employees的员工表。然后定义了添加员工信息、删除员工信息、更新员工信息和查询所有员工信息的函数。

接着依次演示了添加员工信息、查询所有员工信息、更新员工信息、查询所有员工信息、删除员工信息和查询所有员工信息的过程。

您可以根据需要进一步扩展和优化这个示例代码,以满足您的具体需求。

四、在主界面增加增删改查实现相关功能,创建增删改查显示子窗口示例代码

在这里插入图片描述以下是一个示例代码,演示了如何在主界面中增加按钮来打开子窗口,实现员工信息的增删改查功能:

import tkinter as tk
import sqlite3
from tkinter import messagebox

def add_employee_window():
    add_window = tk.Toplevel(root)
    add_window.title("Add Employee")

    name_label = tk.Label(add_window, text="Name:")
    name_label.pack()
    name_entry = tk.Entry(add_window)
    name_entry.pack()

    position_label = tk.Label(add_window, text="Position:")
    position_label.pack()
    position_entry = tk.Entry(add_window)
    position_entry.pack()

    department_label = tk.Label(add_window, text="Department:")
    department_label.pack()
    department_entry = tk.Entry(add_window)
    department_entry.pack()

    def add_employee_to_db():
        name = name_entry.get()
        position = position_entry.get()
        department = department_entry.get()

        conn = sqlite3.connect('employee.db')
        c = conn.cursor()
        c.execute("INSERT INTO employees (name, position, department) VALUES (?, ?, ?)", (name, position, department))
        conn.commit()
        conn.close()

        messagebox.showinfo("Success", "Employee added successfully")
        add_window.destroy()

    add_button = tk.Button(add_window, text="Add Employee", command=add_employee_to_db)
    add_button.pack()

def delete_employee_window():
    delete_window = tk.Toplevel(root)
    delete_window.title("Delete Employee")

    id_label = tk.Label(delete_window, text="Employee ID:")
    id_label.pack()
    id_entry = tk.Entry(delete_window)
    id_entry.pack()

    def delete_employee_from_db():
        employee_id = id_entry.get()

        conn = sqlite3.connect('employee.db')
        c = conn.cursor()
        c.execute("DELETE FROM employees WHERE id=?", (employee_id,))
        conn.commit()
        conn.close()

        messagebox.showinfo("Success", "Employee deleted successfully")
        delete_window.destroy()

    delete_button = tk.Button(delete_window, text="Delete Employee", command=delete_employee_from_db)
    delete_button.pack()

def update_employee_window():
    update_window = tk.Toplevel(root)
    update_window.title("Update Employee")

    id_label = tk.Label(update_window, text="Employee ID:")
    id_label.pack()
    id_entry = tk.Entry(update_window)
    id_entry.pack()

    name_label = tk.Label(update_window, text="Name:")
    name_label.pack()
    name_entry = tk.Entry(update_window)
    name_entry.pack()

    position_label = tk.Label(update_window, text="Position:")
    position_label.pack()
    position_entry = tk.Entry(update_window)
    position_entry.pack()

    department_label = tk.Label(update_window, text="Department:")
    department_label.pack()
    department_entry = tk.Entry(update_window)
    department_entry.pack()

    def update_employee_in_db():
        employee_id = id_entry.get()
        name = name_entry.get()
        position = position_entry.get()
        department = department_entry.get()

        conn = sqlite3.connect('employee.db')
        c = conn.cursor()
        c.execute("UPDATE employees SET name=?, position=?, department=? WHERE id=?", (name, position, department, employee_id))
        conn.commit()
        conn.close()

        messagebox.showinfo("Success", "Employee updated successfully")
        update_window.destroy()

    update_button = tk.Button(update_window, text="Update Employee", command=update_employee_in_db)
    update_button.pack()

def display_employees():
    display_window = tk.Toplevel(root)
    display_window.title("Employees")

    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("SELECT * FROM employees")
    employees = c.fetchall()
    conn.close()

    for employee in employees:
        tk.Label(display_window, text=employee).pack()

root = tk.Tk()
root.title("Employee Management System")

add_button = tk.Button(root, text="Add Employee", command=add_employee_window)
add_button.pack()

delete_button = tk.Button(root, text="Delete Employee", command=delete_employee_window)
delete_button.pack()

update_button = tk.Button(root, text="Update Employee", command=update_employee_window)
update_button.pack()

display_button = tk.Button(root, text="Display Employees", command=display_employees)
display_button.pack()

root.mainloop()

在这个示例代码中,主界面包括了四个按钮:Add Employee、Delete Employee、Update Employee和Display Employees。每个按钮对应打开一个子窗口,用来实现增加、删除、修改和显示员工信息的功能。子窗口中包括相应的输入框和按钮,用户可以在子窗口中输入员工信息并进行操作。

您可以根据需要进一步扩展和优化这个示例代码,以满足您的具体需求。

五、增加模糊查询功能示例代码

在这里插入图片描述为了实现具有模糊查询能力的功能,我们可以添加一个文本框供用户输入关键字,并根据输入的关键字进行模糊查询。以下是更新后的代码示例:

import tkinter as tk
import sqlite3
from tkinter import messagebox

def add_employee_window():
    # 省略添加员工窗口的代码

def delete_employee_window():
    # 省略删除员工窗口的代码

def update_employee_window():
    # 省略更新员工窗口的代码

def display_employees():
    display_window = tk.Toplevel(root)
    display_window.title("Employee List")

    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    
    # 获取用户输入的关键字
    keyword = search_entry.get()

    # 执行模糊查询
    c.execute("SELECT * FROM employees WHERE name LIKE ? OR position LIKE ? OR department LIKE ?", ('%'+keyword+'%', '%'+keyword+'%', '%'+keyword+'%'))
    employees = c.fetchall()
    conn.close()

    for employee in employees:
        employee_info = f"ID: {employee[0]}, Name: {employee[1]}, Position: {employee[2]}, Department: {employee[3]}"
        label = tk.Label(display_window, text=employee_info)
        label.pack()

root = tk.Tk()
root.title("Employee Management System")

# 添加一个文本框用于输入关键字
search_label = tk.Label(root, text="Search:")
search_label.pack()
search_entry = tk.Entry(root)
search_entry.pack()

add_button = tk.Button(root, text="Add Employee", command=add_employee_window)
add_button.pack()

delete_button = tk.Button(root, text="Delete Employee", command=delete_employee_window)
delete_button.pack()

update_button = tk.Button(root, text="Update Employee", command=update_employee_window)
update_button.pack()

display_button = tk.Button(root, text="Display Employees", command=display_employees)
display_button.pack()

root.mainloop()

在这个更新后的代码中,我们添加了一个文本框用于输入关键字,并在display_employees函数中使用LIKE语句进行模糊查询。当用户点击“Display Employees”按钮时,会根据输入的关键字显示符合条件的员工信息。您可以根据需要进一步调整和完善这个功能。

六、增加登录验证功能示例代码

在这里插入图片描述要添加登录验证功能,我们可以创建一个登录窗口,要求用户输入用户名和密码,并在验证成功后才允许访问员工管理系统。以下是一个示例代码,演示如何实现登录验证功能:

import tkinter as tk
import sqlite3
from tkinter import messagebox

def login_window():
    login_window = tk.Toplevel(root)
    login_window.title("Login")

    username_label = tk.Label(login_window, text="Username:")
    username_label.pack()
    username_entry = tk.Entry(login_window)
    username_entry.pack()

    password_label = tk.Label(login_window, text="Password:")
    password_label.pack()
    password_entry = tk.Entry(login_window, show="*")
    password_entry.pack()

    def validate_login():
        username = username_entry.get()
        password = password_entry.get()

        if username == "admin" and password == "admin123":  # 假设用户名和密码为 admin/admin123
            login_window.destroy()
            open_employee_management()
        else:
            messagebox.showerror("Error", "Invalid username or password")

    login_button = tk.Button(login_window, text="Login", command=validate_login)
    login_button.pack()

def open_employee_management():
    root.deiconify()
    display_employees()

def add_employee_window():
    # 省略添加员工窗口的代码

def delete_employee_window():
    # 省略删除员工窗口的代码

def update_employee_window():
    # 省略更新员工窗口的代码

def display_employees():
    display_window = tk.Toplevel(root)
    display_window.title("Employee List")

    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("SELECT * FROM employees")
    employees = c.fetchall()
    conn.close()

    for employee in employees:
        employee_info = f"ID: {employee[0]}, Name: {employee[1]}, Position: {employee[2]}, Department: {employee[3]}"
        label = tk.Label(display_window, text=employee_info)
        label.pack()

root = tk.Tk()
root.title("Employee Management System")
root.withdraw()  # 隐藏主窗口,等待用户登录

login_window()

root.mainloop()

在这个示例代码中,我们创建了一个登录窗口,要求用户输入用户名和密码。如果用户名和密码匹配成功(这里假设用户名为admin,密码为admin123),则关闭登录窗口并显示员工管理系统界面;否则显示错误消息框。您可以根据实际需求修改用户名和密码,并进一步完善登录验证功能。

七、增加权限控制示例代码

在这里插入图片描述分为管理员权限和普通员工权限。普通员工只有查询浏览权限,管理员有增删改查和保存员工信息权限,管理员有增删改查和保存用户权限。
好的,我会为您更新示例代码,使管理员具有增删改查用户信息的权限。以下是更新后的示例代码:

import tkinter as tk
import sqlite3
from tkinter import messagebox

def login_window():
    login_window = tk.Toplevel(root)
    login_window.title("Login")

    username_label = tk.Label(login_window, text="Username:")
    username_label.pack()
    username_entry = tk.Entry(login_window)
    username_entry.pack()

    password_label = tk.Label(login_window, text="Password:")
    password_label.pack()
    password_entry = tk.Entry(login_window, show="*")
    password_entry.pack()

    def validate_login():
        username = username_entry.get()
        password = password_entry.get()

        conn = sqlite3.connect('user.db')
        c = conn.cursor()
        c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
        user = c.fetchone()
        conn.close()

        if user:
            login_window.destroy()
            open_employee_management(user)
        else:
            messagebox.showerror("Error", "Invalid username or password")

    login_button = tk.Button(login_window, text="Login", command=validate_login)
    login_button.pack()

def open_employee_management(user):
    root.deiconify()
    display_employees()

    display_button = tk.Button(root, text="Display Employee Info", command=display_employees)
    display_button.pack()

    if user[2] == 'admin':
        add_button = tk.Button(root, text="Add Employee", command=add_employee_window)
        add_button.pack()

        delete_button = tk.Button(root, text="Delete Employee", command=delete_employee_window)
        delete_button.pack()

        update_button = tk.Button(root, text="Update Employee", command=update_employee_window)
        update_button.pack()

        save_employee_button = tk.Button(root, text="Save Employee Info", command=save_employee_info)
        save_employee_button.pack()

        save_user_button = tk.Button(root, text="Save User Info", command=save_user_info)
        save_user_button.pack()

        display_user_button = tk.Button(root, text="Display User Info", command=display_users)
        display_user_button.pack()

        add_user_button = tk.Button(root, text="Add User", command=add_user_window)
        add_user_button.pack()

        delete_user_button = tk.Button(root, text="Delete User", command=delete_user_window)
        delete_user_button.pack()

        update_user_button = tk.Button(root, text="Update User", command=update_user_window)
        update_user_button.pack()

def add_employee_window():
    # 省略添加员工窗口的代码

def delete_employee_window():
    # 省略删除员工窗口的代码

def update_employee_window():
    # 省略更新员工窗口的代码

def save_employee_info():
    # 省略保存员工信息的代码

def save_user_info():
    # 省略保存用户信息的代码

def display_employees():
    display_window = tk.Toplevel(root)
    display_window.title("Employee List")

    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("SELECT * FROM employees")
    employees = c.fetchall()
    conn.close()

    for employee in employees:
        employee_info = f"ID: {employee[0]}, Name: {employee[1]}, Position: {employee[2]}, Department: {employee[3]}"
        label = tk.Label(display_window, text=employee_info)
        label.pack()

def display_users():
    display_window = tk.Toplevel(root)
    display_window.title("User List")

    conn = sqlite3.connect('user.db')
    c = conn.cursor()
    c.execute("SELECT * FROM users")
    users = c.fetchall()
    conn.close()

    for user in users:
        user_info = f"ID: {user[0]}, Username: {user[1]}, Role: {user[2], Permission: {user[3]}"
        label = tk.Label(display_window, text=user_info)
        label.pack()

def add_user_window():
    # 省略添加用户窗口的代码

def delete_user_window():
    # 省略删除用户窗口的代码

def update_user_window():
    # 省略更新用户窗口的代码

root = tk.Tk()
root.title("Employee Management System")
root.withdraw()  # 隐藏主窗口,等待用户登录

login_window()

root.mainloop()

八、实现比较完整漂亮美观的员工管理信息系统示例代码

在这里插入图片描述下面是使用tkinter.ttk模块写的员工管理信息系统代码示例:

import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import sqlite3

def create_employee_table():
    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS employees
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                 name TEXT NOT NULL,
                 position TEXT NOT NULL,
                 department TEXT NOT NULL)''')
    conn.commit()
    conn.close()

def create_user_table():
    conn = sqlite3.connect('user.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS users
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                 username TEXT NOT NULL,
                 password TEXT NOT NULL,
                 role TEXT NOT NULL,
                 permission TEXT NOT NULL)''')
    conn.commit()
    conn.close()

def insert_employee(name, position, department):
    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("INSERT INTO employees (name, position, department) VALUES (?, ?, ?)", (name, position, department))
    conn.commit()
    conn.close()

def delete_employee(id):
    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("DELETE FROM employees WHERE id=?", (id,))
    conn.commit()
    conn.close()

def update_employee(id, name, position, department):
    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("UPDATE employees SET name=?, position=?, department=? WHERE id=?", (name, position, department, id))
    conn.commit()
    conn.close()

def display_employees():
    for row in tree.get_children():
        tree.delete(row)

    conn = sqlite3.connect('employee.db')
    c = conn.cursor()
    c.execute("SELECT * FROM employees")
    employees = c.fetchall()
    conn.close()

    for employee in employees:
        tree.insert('', 'end', values=employee)

def login_window():
    login_window = tk.Toplevel(root)
    login_window.title("Login")

    username_label = ttk.Label(login_window, text="Username:")
    username_label.pack()
    username_entry = ttk.Entry(login_window)
    username_entry.pack()

    password_label = ttk.Label(login_window, text="Password:")
    password_label.pack()
    password_entry = ttk.Entry(login_window, show="*")
    password_entry.pack()

    def validate_login():
        username = username_entry.get()
        password = password_entry.get()

        conn = sqlite3.connect('user.db')
        c = conn.cursor()
        c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
        user = c.fetchone()
        conn.close()

        if user:
            login_window.destroy()
            open_employee_management(user)
        else:
            messagebox.showerror("Error", "Invalid username or password")

    login_button = ttk.Button(login_window, text="Login", command=validate_login)
    login_button.pack()

def open_employee_management(user):
    root.deiconify()
    display_employees()

    if user[3] == 'admin':
        add_button = ttk.Button(root, text="Add Employee", command=add_employee_window)
        add_button.pack()

        delete_button = ttk.Button(root, text="Delete Employee", command=delete_employee_window)
        delete_button.pack()

        update_button = ttk.Button(root, text="Update Employee", command=update_employee_window)
        update_button.pack()

def add_employee_window():
    add_window = tk.Toplevel(root)
    add_window.title("Add Employee")

    name_label = ttk.Label(add_window, text="Name:")
    name_label.pack()
    name_entry = ttk.Entry(add_window)
    name_entry.pack()

    position_label = ttk.Label(add_window, text="Position:")
    position_label.pack()
    position_entry = ttk.Entry(add_window)
    position_entry.pack()

    department_label = ttk.Label(add_window, text="Department:")
    department_label.pack()
    department_entry = ttk.Entry(add_window)
    department_entry.pack()

    def save_employee():
        name = name_entry.get()
        position = position_entry.get()
        department = department_entry.get()
        insert_employee(name, position, department)
        add_window.destroy()
        display_employees()

    save_button = ttk.Button(add_window, text="Save", command=save_employee)
    save_button.pack()

def delete_employee_window():
    delete_window = tk.Toplevel(root)
    delete_window.title("Delete Employee")

    id_label = ttk.Label(delete_window, text="Employee ID:")
    id_label.pack()
    id_entry = ttk.Entry(delete_window)
    id_entry.pack()

    def delete_employee_record():
        id = id_entry.get()
        delete_employee(id)
        delete_window.destroy()
        display_employees()

    delete_button = ttk.Button(delete_window, text="Delete", command=delete_employee_record)
    delete_button.pack()

def update_employee_window():
    update_window = tk.Toplevel(root)
    update_window.title("Update Employee")

    id_label = ttk.Label(update_window, text="Employee ID:")
    id_label.pack()
    id_entry = ttk.Entry(update_window)
    id_entry.pack()

    name_label = ttk.Label(update_window, text="Name:")
    name_label.pack()
    name_entry = ttk.Entry(update_window)
    name_entry.pack()

    position_label = ttk.Label(update_window, text="Position:")
    position_label.pack()
    position_entry = ttk.Entry(update_window)
    position_entry.pack()

    department_label = ttk.Label(update_window, text="Department:")
    department_label.pack()
    department_entry = ttk.Entry(update_window)
    department_entry.pack()

    def update_employee_record():
        id = id_entry.get()
        name = name_entry.get()
        position = position_entry.get()
        department = department_entry.get()
        update_employee(id, name, position, department)
        update_window.destroy()
        display_employees()

    update_button = ttk.Button(update_window, text="Update", command=update_employee_record)
    update_button.pack()

root = tk.Tk()
root.title("Employee Management System")
root.withdraw()

create_employee_table()
create_user_table()

# 添加一个默认管理员用户
conn = sqlite3.connect('user.db')
c = conn.cursor()
c.execute("INSERT INTO users (username, password, role, permission) VALUES (?, ?, ?, ?)", ('admin', 'admin', 'admin', 'full'))
conn.commit()
conn.close()

tree = ttk.Treeview(root, columns=('Name', 'Position', 'Department'))
tree.heading('#0', text='ID')
tree.heading('Name', text='Name')
tree.heading('Position', text='Position')
tree.heading('Department', text='Department')
tree.pack()

login_window()

root.mainloop()

这个代码示例使用了tkinter.ttk模块来创建GUI界面,其中的ttk.Labelttk.Entryttk.Button等部件都是ttk模块提供的。同时,使用ttk.Treeview来展示员工信息列表。

九、归纳总结

在这里插入图片描述这个重写的员工管理信息系统程序具有以下功能:

  1. 用户登录功能:用户可以通过输入用户名和密码进行登录,系统会验证用户信息并根据用户角色打开相应的功能界面。程序会检查用户输入的用户名和密码是否在用户数据库中存在,如果存在且匹配,则允许用户登录。

  2. 员工信息展示功能:在用户成功登录后的主界面上展示所有员工的信息,包括员工的ID、姓名、职位和部门。这些信息会以表格的形式展示在程序的主界面上,方便用户查看。

  3. 添加员工功能:管理员用户可以通过点击“Add Employee”按钮打开添加员工界面,然后输入新员工的姓名、职位和部门信息,最后点击“Save”按钮将新员工信息保存到员工数据库中。添加员工功能可以帮助管理员快速录入新员工的信息。

  4. 删除员工功能:管理员用户可以通过点击“Delete Employee”按钮打开删除员工界面,然后输入要删除的员工ID,最后点击“Delete”按钮将对应员工信息从数据库中删除。删除员工功能可以帮助管理员管理员工信息,保持数据库的准确性。

  5. 更新员工功能:管理员用户可以通过点击“Update Employee”按钮打开更新员工界面,然后输入要更新的员工ID以及新的姓名、职位和部门信息,最后点击“Update”按钮将对应员工信息更新到数据库中。更新员工功能可以帮助管理员及时更新员工信息。

  6. 创建员工和用户数据库表格功能:程序在启动时会创建员工和用户两个数据库表格,用于存储员工信息和用户信息。这样可以保证程序有一个持久化的数据存储方式,方便用户管理员工和用户信息。

  7. 默认管理员用户创建功能:程序在启动时会向用户数据库中添加一个默认的管理员用户,用户名为“admin”,密码为“admin”,角色为“admin”,拥有完整的权限。这样可以确保系统有一个管理员用户可以管理系统。

总的来说,这个员工管理信息系统程序具有用户登录、员工信息展示、添加员工、删除员工、更新员工、创建数据库表格和默认管理员用户创建等功能,可以帮助管理员高效地管理员工信息。另外,tkinter.ttk模块的使用实现了程序漂亮美观时尚现代的图形化界面。希望以上详细的功能描述能够帮助您更好地理解这个程序。当然,实际开发当中还要添加更多功能,完善事件处理,做进一步优化,才能满足客户需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1452741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从物联网到数字孪生:智慧社区的演变

随着科技的飞速发展和数字化转型的深入推进&#xff0c;智慧社区已成为提升城市治理水平和居民生活质量的重要方向。在这一演变过程中&#xff0c;物联网和数字孪生技术起到了至关重要的作用。本文将深入探讨从物联网到数字孪生的演变过程&#xff0c;分析这一转变对智慧社区建…

FL Studio 21中文破解激活版2024免费下载安装图文教程

FL Studio 21.2.1.3859中文破解激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21等等。有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&#xff0c;而且F…

基于springboot大学生租房系统源码和论文

伴随着全球信息化发展&#xff0c;行行业业都与计算机技术相衔接&#xff0c;计算机技术普遍运用于各大行业&#xff0c;大学生租房系统便是其中一种。实施计算机系统来管理可以降低大学生租房管理的成本&#xff0c;使整个大学生租房的发展和服务水平有显著提升。 本论文主要面…

知识图谱:py2neo导入周杰伦歌单csv文件

文章目录 py2neo导入csv文件py2neo导入周杰伦歌单csv效果展示 py2neo导入csv文件 之前写的知识图谱指南 知识图谱&#xff1a;py2neo将csv文件导入neo4j 因为没有区分不同实体entity的类型&#xff0c;所以颜色相同&#xff0c;无法相互区分歌手、歌曲还是专辑等等。 py2ne…

解决STM32MP157开发板密码登录问题

开发板密码登录问题是很多人遇到的问题&#xff0c;网上有很多帖子&#xff0c;我也参考过&#xff0c;不太适用&#xff0c;很复杂&#xff0c;甚至会被误导&#xff0c;我差点连ubuntu虚拟机都无法登录了。有的密码匹配&#xff0c;有的取消不了密码。 1、密码配置&#xff…

恒流模块与常用电容

户外电源电芯&#xff1a;DJ采用无热中心设计&#xff1a;每个电芯都有一部分裸露在外面&#xff0c;保证良好散热上 固态电容相较于普通电解电容具有更高的电气性能、更长的使用寿命和更稳定的温度特性&#xff0c;但成本也相对较高。固态电容在1块左右&#xff0c;电解电容在…

import tensorflow_hub报错

问题&#xff1a; 导入tensorflow_hub报ModuleNotFoundError: No module named ‘tensorflow.python.checkpoint’ 解决&#xff1a; tensorflow-estimator版本不对 和tensorflow&#xff08;2.6.0&#xff09;版本一致 。 pip install -U tensorflow-estimator2.6.0 验证&a…

无线充电 线圈设计

本文所讨论参数&#xff0c;均有论文&#xff0c;仿真和实测支撑&#xff0c;也欢迎感兴趣的小伙伴一起讨论。 有个笑话&#xff0c;说是18年无线充白牌热销的时段&#xff0c;单片机没赚到钱&#xff0c;壳料没赚到钱&#xff0c;pcba也没赚到钱&#xff0c;钱都被卖NP0电容和…

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java)

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) B题传送门&#xff1a;B. Sasha and the Drawing 题目&#xff1a;B. Sasha and the Drawing Example input 3 4 3 3 3 10 3 9 4 7 7 11 2 3output 2 …

挑战杯 YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

JavaWeb-JDBC-API详解

一、JDBC介绍 二、JDBC 快速入门 package com.itheima.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDCBDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("co…

微信小程序: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. 微信小程序公用功能2.1 配置准备工作2.1.1 配置文件准备(单体放yml中 微服务放配置中心)2.1.2 获取配置文件中的小程序配置2.1.3 设置redis配置 2.2 创建不同功能工具类2.2.1 创建微信服务工具类WechatServiceUtils2.2.2 创建Re…

在windows上安装好anaconda后,输入conda命令出现 OSError: [WinError 123] 文件名、目录名或卷标语法不正确。

下载anaconda后使用conda命令就会报错&#xff0c;重装几次后无效。于是潜心解决发现问题&#xff1a; 报错&#xff1a; OSError: [WinError 123] 文件名、目录名或卷标语法不正确。 在这里是路径无效&#xff0c;“.”应该是“&#xff1a;”本身没有问题。路径的错误在意…

Java集合 List接口

List接口操作 Java的List接口是Java集合框架中的一部分&#xff0c;它表示有序的集合。List接口提供了许多常用的方法&#xff0c;以下是其中的一些例子&#xff1a; 增加元素 add(E e)&#xff1a;将指定的元素插入此列表的末尾。 List<String> list new ArrayList…

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…

C++11---(1)

目录 一、C11简介 二、列表初始化 2.1、{ } 初始化 三、变量类型推导 3.1、auto 3.2、decltype 为什么需要decltype 四、final和override 4.1、final 4.2、override 五、默认成员函数控制 5.1、default修饰函数 5.2、delete修饰函数 六、nullptr 一、C11简介 C11是…

JavaScript_00001_00000

contents 简介变量与数据类型自动类型转换强制类型转换 简介 变量与数据类型 根据变量定义的范围不同&#xff0c;变量有全局变量和局部变量之分。直接定义的变量是全局变量&#xff0c;全局变量可以被所有的脚本访问&#xff1b;在函数里定义的变量称为局部变量&#xff0c;…

17-k8s控制器资源-job控制

job控制器&#xff1a;就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never 1&#xff0c;job控制器案例描述 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b; 事件&#xff1a;计算π的值&a…

【初始RabbitMQ】工作队列的实现

工作队列 工作队列&#xff08;又称为任务队列&#xff09;的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程…

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net.Appender.Roll…