You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MongoDB数据在Python Tkinter的Treeview中显示并添加滚动条?

替换Grid布局为Treeview实现滚动展示MongoDB员工数据

步骤1:创建Treeview与滚动条组件

先在界面中替换原Entry展示区域,添加Treeview和滚动条:

import tkinter as tk
from tkinter import ttk, messagebox
from pymongo import MongoClient, ObjectId

# 连接MongoDB(替换为你的连接字符串)
client = MongoClient('mongodb://localhost:27017/')
db = client['your_database_name']
collection = db['your_collection_name']

# 主窗口初始化
root = tk.Tk()
root.title('员工管理系统')

# 创建数据展示框架
data_frame = tk.Frame(root)
data_frame.grid(row=0, column=0, padx=10, pady=10, sticky='nsew')

# 配置Treeview列(替换为你的MongoDB实际字段)
columns = ('_id', 'name', 'position', 'salary')
tree = ttk.Treeview(data_frame, columns=columns, show='headings')

# 设置列标题与宽度
tree.heading('_id', text='员工ID')
tree.heading('name', text='姓名')
tree.heading('position', text='职位')
tree.heading('salary', text='月薪')

tree.column('_id', width=120)
tree.column('name', width=150)
tree.column('position', width=180)
tree.column('salary', width=100)

# 添加垂直滚动条
scrollbar = ttk.Scrollbar(data_frame, orient='vertical', command=tree.yview)
tree.configure(yscrollcommand=scrollbar.set)

# 布局组件
tree.grid(row=0, column=0, sticky='nsew')
scrollbar.grid(row=0, column=1, sticky='ns')

# 让框架自适应窗口大小
data_frame.grid_columnconfigure(0, weight=1)
data_frame.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)

步骤2:修改creategrid(n)函数

替换原创建Entry的逻辑,改为从MongoDB拉取数据并填充Treeview:

def creategrid(n):
    # 清空Treeview现有内容
    for item in tree.get_children():
        tree.delete(item)
    
    # 查询MongoDB数据(n为查询条数,若要展示全部可去掉limit(n))
    employees = collection.find().limit(n)
    
    # 插入数据到Treeview(注意ObjectId需转字符串)
    for emp in employees:
        tree.insert(
            '', tk.END,
            values=(
                str(emp['_id']),
                emp['name'],
                emp['position'],
                emp['salary']
            )
        )

步骤3:适配CRUD其他操作(示例)

增删改操作后调用creategrid(n)刷新Treeview:

新增员工示例

def add_employee():
    # 获取输入框数据(假设你有name_entry、position_entry、salary_entry)
    name = name_entry.get()
    position = position_entry.get()
    salary = salary_entry.get()
    
    if not all([name, position, salary]):
        messagebox.showwarning('提示', '请填写完整信息')
        return
    
    # 插入MongoDB
    collection.insert_one({
        'name': name,
        'position': position,
        'salary': float(salary)
    })
    
    # 清空输入框
    name_entry.delete(0, tk.END)
    position_entry.delete(0, tk.END)
    salary_entry.delete(0, tk.END)
    
    # 刷新Treeview
    creategrid(100)

删除选中员工示例

def delete_employee():
    selected_items = tree.selection()
    if not selected_items:
        messagebox.showwarning('提示', '请选择要删除的员工')
        return
    
    # 获取选中员工ID并删除
    for item in selected_items:
        emp_id = tree.item(item)['values'][0]
        collection.delete_one({'_id': ObjectId(emp_id)})
        tree.delete(item)

注意事项

  • 替换代码中的your_database_name和your_collection_name为你的MongoDB实际库名、集合名
  • 根据员工数据字段,修改columns列表、列标题及tree.insert中的values参数
  • 若需分页展示,可结合skip()和limit()调整查询逻辑

内容的提问来源于stack exchange,提问作者Nguyễn Quốc Mạnh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:25:19