活动介绍
file-type

TreeView动态绑定与CheckBox赋值技术分享

4星 · 超过85%的资源 | 下载需积分: 21 | 321KB | 更新于2025-06-09 | 85 浏览量 | 57 下载量 举报 1 收藏
download 立即下载
从提供的信息中可以看出,这是一个关于如何在.NET环境中使用TreeView控件,并且实现动态绑定和赋值到TreeView中的CheckBox控件的具体实例。在此基础上,我们会详细探讨.NET环境下TreeView控件的使用,以及如何从数据库中读取数据并绑定到TreeView上,并且将这些数据动态赋值给TreeView控件中的CheckBox。 ### 知识点一:TreeView控件在.NET中的使用 TreeView控件是Windows Forms和WPF(Windows Presentation Foundation)应用程序中常用的界面元素,它能够以树状结构形式显示节点信息。在.NET框架中,TreeView控件主要用来展示具有层次结构的数据。 #### 1. TreeView控件基本操作 - **添加节点(TreeNode)**:可以使用`Nodes.Add()`方法为TreeView添加节点。 - **设置节点属性**:例如节点文本、图像索引、是否可选、是否可展开等。 - **处理事件**:如节点点击事件(AfterSelect)、节点展开事件(AfterExpand)等。 #### 2. 绑定数据 - **静态绑定**:通过编码的方式预先定义好节点的数据源,并绑定到TreeView控件上。 - **动态绑定**:利用数据绑定技术,通过数据源(如数据库)动态地生成TreeView的节点结构。 ### 知识点二:动态绑定TreeView 动态绑定TreeView意味着要根据实际的数据源(如数据库中的表)来动态生成TreeView的节点。具体步骤包括: #### 1. 数据库设计 - 在数据库中设计好需要展示的表结构。根据描述,这里需要关联三张表,假设为Table1、Table2、Table3,它们之间通过特定的外键或关系进行关联。 #### 2. 数据访问层 - 使用ADO.NET或者Entity Framework等数据访问技术从数据库中查询数据。 - 查询结果通常会是一个包含数据的DataTable或者List<T>对象。 #### 3. 绑定数据至TreeView - 遍历数据访问层返回的数据集,根据数据之间的关系构建 TreeNode。 - 为每个数据行创建TreeNode对象,并根据需要设置属性,如是否可选、是否可展开等。 - 将创建的TreeNode对象添加到TreeView的Nodes集合中。 ### 知识点三:动态赋值TreeView中的CheckBox 动态赋值意味着要在TreeView的节点上展示数据的特定状态,并且这种状态是根据数据库中的数据动态决定的。 #### 1. 设计CheckBox绑定逻辑 - 需要确定数据库中的哪些字段能够决定CheckBox的选中状态。 - 根据这些字段的值来设置TreeNode的CheckBox状态(Checked属性)。 #### 2. 处理数据与界面的交互 - 给TreeView添加AfterSelect事件处理器。 - 在事件处理器中,根据选中的TreeNode的状态变化,以及与之相关的数据库记录,更新数据库中的相应字段。 - 同时需要处理CheckBox状态变化时的数据更新,可能会涉及到数据库事务处理,确保数据的一致性。 ### 知识点四:实际代码实现 由于描述中没有提供具体代码实现,以下是基于描述的一个假设性代码实现方案: ```csharp // 假设已经通过数据访问层获取了数据并将其存储在DataTable dt中 TreeNode rootNode = new TreeNode("根节点"); foreach (DataRow row in dt.Rows) { // 假设dt中存储的有表的层级关系和CheckBox状态需要的数据字段 TreeNode childNode = new TreeNode(row["Text"].ToString()); // 根据数据判断CheckBox状态 childNode.Checked = Convert.ToBoolean(row["CheckBoxState"]); // 添加到根节点或对应父节点中 rootNode.Nodes.Add(childNode); } // 将根节点添加到TreeView控件中 myTreeView.Nodes.Add(rootNode); ``` ### 知识点五:优化与注意事项 - **性能优化**:在大量数据的情况下,需要考虑TreeView控件加载性能问题,可以采用懒加载(即按需加载子节点)等策略。 - **用户体验**:动态加载大量节点时,应提供用户体验上的反馈,比如加载动画,避免用户界面冻结。 - **异常处理**:在数据绑定过程中,可能会出现异常,需要编写健壮的代码来捕获并处理这些异常,以免程序崩溃。 通过以上的知识点展开,我们可以对如何在.NET框架中实现一个动态绑定到数据库并且能够在TreeView控件中的节点上设置CheckBox状态的操作有了较为全面的了解。这些知识涵盖了从设计、开发到实现的各个环节,并对可能遇到的问题和解决方案提供了指导。

相关推荐

filetype

import tkinter as tk from tkinter import ttk, messagebox, filedialog import globals class Surface: def __init__(self, r=float('inf'), d=0.0, n=1.0, vd=0.0): self.r = r # 曲率半径 (mm) self.d = d # 厚度/间隔 (mm) self.n = n # 折射率 self.vd = vd # 阿贝数 self.x = 0.0 # 表面位置,将在系统中设置 def __str__(self): r_str = f"{self.r:.2f}" if abs(self.r) < 1e10 else "平面" return f"表面: r={r_str}, d={self.d:.2f}, n={self.n:.4f}, vd={self.vd:.1f}" # 字典文件处理函数 def parse_file_to_dict(file_path): """从文件读取键值对到字典""" result = {} try: with open(file_path, 'r') as file: for line in file: cleaned_line = line.strip() if not cleaned_line or ':' not in cleaned_line: continue parts = cleaned_line.split(':', 1) key = parts[0].strip() value = parts[1].strip() if key: result[key] = value return result except Exception as e: messagebox.showerror("错误", f"读取文件失败: {str(e)}") return {} def write_dict_to_file(file_path, data_dict): """将字典写入文件""" try: with open(file_path, 'w') as file: for key, value in data_dict.items(): file.write(f"{key}:{value}\n") return True except Exception as e: messagebox.showerror("错误", f"写入文件失败: {str(e)}") return False # 计算函数 - 留作接口 def calculate(surfaces, var1, var2, var3, var4, var5, var6): """计算函数,留作接口""" # 这里可以添加实际的计算逻辑 result = "计算结果:\n" result += f"变量1: {var1}, 变量2: {var2}, 变量3: {var3}\n" result += f"变量4: {var4}, 变量5: {var5}, 变量6: {var6}\n\n" result += "光学表面参数:\n" for i, surf in enumerate(surfaces): result += f"表面 {i+1}: {surf}\n" return result class MainApplication: def __init__(self, root): self.root = root self.root.title("光学系统计算工具") self.root.geometry("850x750") # 存储光学表面的列表 self.surfs = [] # 变量定义 self.var1 = None self.var2 = None self.var3 = None self.var4 = None self.var5 = None self.var6 = None # 自定义数据字典 self.data_dict = {} # 存储选项变量的字典 self.option_vars = {} self.entry_vars = {} self.create_widgets() self.create_option_widgets() self.create_optical_surface_ui() def create_widgets(self): # 文件操作框架 file_frame = ttk.LabelFrame(self.root, text="文件操作") file_frame.pack(padx=10, pady=5, fill="x") # 加载路径 ttk.Label(file_frame, text="镜头数据路径:").grid(row=0, column=0, padx=5, pady=5, sticky="e") self.load_path_entry = ttk.Entry(file_frame, width=50) self.load_path_entry.grid(row=0, column=1, padx=5, pady=5) load_btn = ttk.Button(file_frame, text="加载", command=self.load_data) load_btn.grid(row=0, column=2, padx=5, pady=5) # 保存路径 ttk.Label(file_frame, text="保存镜头数据:").grid(row=1, column=0, padx=5, pady=5, sticky="e") self.save_path_entry = ttk.Entry(file_frame, width=50) self.save_path_entry.grid(row=1, column=1, padx=5, pady=5) save_btn = ttk.Button(file_frame, text="保存", command=self.save_data) save_btn.grid(row=1, column=2, padx=5, pady=5) def create_option_widgets(self): """创建选项控件和输入框""" option_frame = ttk.LabelFrame(self.root, text="参数选项") option_frame.pack(padx=10, pady=5, fill="x") # 选项配置 options = [ ("物距", ["有限", "无限"]), ("孔径", ["入瞳直径", "半孔径角", "物高"]), ("视场", ["半视场角", "物高"]) ] for i, (label, choices) in enumerate(options): # 选项框架 frame = ttk.Frame(option_frame) frame.pack(fill="x", padx=5, pady=5) # 选项标签 ttk.Label(frame, text=f"{label}:").pack(side=tk.LEFT, padx=5) # 单选按钮组 var = tk.StringVar(value=choices[0]) self.option_vars[label] = var for choice in choices: rb = ttk.Radiobutton(frame, text=choice, variable=var, value=choice) rb.pack(side=tk.LEFT, padx=5) # 输入框 ttk.Label(frame, text="值:").pack(side=tk.LEFT, padx=(15, 5)) entry_var = tk.StringVar() self.entry_vars[label] = entry_var entry = ttk.Entry(frame, textvariable=entry_var, width=20) entry.pack(side=tk.LEFT) # 导入按钮 import_btn = ttk.Button(option_frame, text="导入参数", command=self.import_parameters) import_btn.pack(pady=5) def create_optical_surface_ui(self): """创建光学表面输入界面""" input_frame = ttk.LabelFrame(self.root, text="光学表面参数") input_frame.pack(padx=10, pady=5, fill="x") ttk.Label(input_frame, text="曲率半径 (mm):").grid(row=0, column=0, padx=5, pady=5, sticky="e") ttk.Label(input_frame, text="厚度 (mm):").grid(row=0, column=2, padx=5, pady=5, sticky="e") ttk.Label(input_frame, text="折射率 (nd):").grid(row=0, column=4, padx=5, pady=5, sticky="e") ttk.Label(input_frame, text="阿贝数 (vd):").grid(row=0, column=6, padx=5, pady=5, sticky="e") self.radius_entry = ttk.Entry(input_frame, width=10) self.radius_entry.grid(row=0, column=1, padx=5, pady=5) self.radius_entry.insert(0, "50") self.thickness_entry = ttk.Entry(input_frame, width=10) self.thickness_entry.grid(row=0, column=3, padx=5, pady=5) self.thickness_entry.insert(0, "5") self.nd_entry = ttk.Entry(input_frame, width=10) self.nd_entry.grid(row=0, column=5, padx=5, pady=5) self.nd_entry.insert(0, "1.5") self.vd_entry = ttk.Entry(input_frame, width=10) self.vd_entry.grid(row=0, column=7, padx=5, pady=5) self.vd_entry.insert(0, "60") button_frame = ttk.Frame(input_frame) button_frame.grid(row=1, column=0, columnspan=8, pady=5) add_btn = ttk.Button(button_frame, text="添加表面", command=self.add_surf) add_btn.pack(side=tk.LEFT, padx=5) remove_btn = ttk.Button(button_frame, text="删除表面", command=self.remove_surf) remove_btn.pack(side=tk.LEFT, padx=5) tree_frame = ttk.LabelFrame(self.root, text="光学系统表面") tree_frame.pack(padx=10, pady=5, fill="both", expand=True) columns = ("radius", "thickness", "nd", "vd") self.tree = ttk.Treeview(tree_frame, columns=columns, show="headings") self.tree.heading("radius", text="曲率半径 (mm)") self.tree.heading("thickness", text="厚度 (mm)") self.tree.heading("nd", text="折射率 (nd)") self.tree.heading("vd", text="阿贝数 (vd)") vsb = ttk.Scrollbar(tree_frame, orient="vertical", command=self.tree.yview) self.tree.configure(yscrollcommand=vsb.set) self.tree.pack(side=tk.LEFT, fill="both", expand=True) vsb.pack(side=tk.RIGHT, fill="y") # 计算按钮 calc_frame = ttk.Frame(self.root) calc_frame.pack(pady=10) calc_btn = ttk.Button(calc_frame, text="开始计算", command=self.run_calculation) calc_btn.pack(side=tk.LEFT, padx=5) # 结果显示框 result_frame = ttk.LabelFrame(self.root, text="计算结果") result_frame.pack(padx=10, pady=5, fill="both", expand=True) self.result_text = tk.Text(result_frame, wrap=tk.WORD) result_scroll_y = ttk.Scrollbar(result_frame, orient="vertical", command=self.result_text.yview) result_scroll_x = ttk.Scrollbar(result_frame, orient="horizontal", command=self.result_text.xview) self.result_text.configure(yscrollcommand=result_scroll_y.set, xscrollcommand=result_scroll_x.set) result_scroll_y.pack(side=tk.RIGHT, fill="y") result_scroll_x.pack(side=tk.BOTTOM, fill="x") self.result_text.pack(side=tk.LEFT, fill="both", expand=True) def add_surf(self): try: r = self.radius_entry.get().strip() d = self.thickness_entry.get().strip() n = self.nd_entry.get().strip() v = self.vd_entry.get().strip() r = float(r) if r else float('inf') d = float(d) if d else 0.0 n = float(n) if n else 1.0 v = float(v) if v else 0.0 self.tree.insert("", "end", values=(f"{r if r != float('inf') else '平面'}", d, n, v)) self.surfs.append(Surface(r, d, n, v)) self.radius_entry.delete(0, tk.END) self.thickness_entry.delete(0, tk.END) self.nd_entry.delete(0, tk.END) self.vd_entry.delete(0, tk.END) self.radius_entry.focus_set() except ValueError: messagebox.showerror("输入错误", "请输入有效的数字") def remove_surf(self): selected = self.tree.selection() if selected: for item in selected: self.tree.delete(item) if self.surfs: self.surfs.pop() def run_calculation(self): """执行计算""" if not self.surfs: messagebox.showerror("错误", "请至少添加一个光学表面") return # 检查变量是否已导入 if any(v is None for v in [self.var1, self.var2, self.var3, self.var4, self.var5, self.var6]): messagebox.showwarning("警告", "请先导入所有参数") return try: # 调用计算函数 result = calculate( self.surfs, self.var1, self.var2, self.var3, self.var4, self.var5, self.var6 ) # 显示结果 self.result_text.delete(1.0, tk.END) self.result_text.insert(tk.END, result) except Exception as e: messagebox.showerror("计算错误", f"计算过程中发生错误: {str(e)}") def import_parameters(self): """导入参数按钮处理函数""" try: # 根据选项分配值 for label, var in self.option_vars.items(): entry_value = self.entry_vars[label].get().strip() if not entry_value: messagebox.showwarning("警告", f"{label}的输入值不能为空") return # 尝试转换为浮点数,如果失败则保留字符串 try: entry_value = float(entry_value) except ValueError: pass # 根据选项分配值 if label == "物距": if var.get() == "有限": self.var1 = entry_value else: self.var1 = 1e15 # 无限远 elif label == "有限": if var.get() == "入瞳直径": self.var2 = entry_value elif var.get() == "半孔径角": self.var3 = entry_value else: self.var4 = entry_value elif label == "视场": if var.get() == "半视场角": self.var5 = entry_value else: self.var6 = entry_value # 显示导入结果 self.log_message("参数导入成功:") self.log_message(f"变量1: {self.var1}, 变量2: {self.var2}") self.log_message(f"变量3: {self.var3}, 变量4: {self.var4},变量5: {self.var5}") self.log_message(f"变量5: {self.var5}, 变量6: {self.var6}") except Exception as e: messagebox.showerror("导入错误", f"参数导入失败: {str(e)}") def log_message(self, message): """在结果文本框中添加消息""" self.result_text.insert(tk.END, message + "\n") self.result_text.see(tk.END) # 滚动到末尾 def load_data(self): """加载数据按钮处理函数""" file_path = self.load_path_entry.get() if not file_path: messagebox.showwarning("警告", "请输入文件路径") return data_dict = parse_file_to_dict(file_path) if data_dict: messagebox.showinfo("成功", f"成功加载 {len(data_dict)} 条数据") self.data_dict = data_dict self.log_message(f"已加载文件: {file_path}") def save_data(self): """保存数据按钮处理函数""" file_path = self.save_path_entry.get() if not file_path: messagebox.showwarning("警告", "请输入保存路径") return # 创建要保存的数据字典 save_dict = {} # 添加光学表面数据 for i, surf in enumerate(self.surfs): save_dict[f"surface_{i+1}_r"] = surf.r save_dict[f"surface_{i+1}_d"] = surf.d save_dict[f"surface_{i+1}_n"] = surf.n save_dict[f"surface_{i+1}_vd"] = surf.vd # 添加变量数据 save_dict["var1"] = self.var1 save_dict["var2"] = self.var2 save_dict["var3"] = self.var3 save_dict["var4"] = self.var4 save_dict["var5"] = self.var5 save_dict["var6"] = self.var6 globals.inputData['objectPosition']= self.var1 globals.inputData['entranceDiameter'] = self.var2 globals.inputData['entrancePupilAngle'] = self.var3 globals.inputData['objectHeight'] = self.var4 globals.inputData['objectAngle'] = self.var5 globals.inputData['entrancePupilAngle'] = self.var6 # 合并其他数据 save_dict.update(self.data_dict) if write_dict_to_file(file_path, save_dict): messagebox.showinfo("成功", "数据保存成功") self.log_message(f"数据已保存到: {file_path}") if __name__ == "__main__": root = tk.Tk() app = MainApplication(root) root.mainloop() 这部分代码已经不够用了,现在我要做一个光学系统的计算程序,请编写一个框架可以文件读取系统参数和保存结果,可以直接输入参数并显示结果;输入的参数包括:各折射面的曲面半径r、厚度d、d光折射率nd、阿贝数vd;入曈直径及入曈位置(相对第一个面顶点);选择输入物在无穷远(此时需输入半视场角)或物在有限远(此时需输入物高,物距,孔径角)。显示可以保存为文件的结果,包括焦距f’、理想像距l’(以透镜最后一面为参考、实际像位置(以透镜最后一面为参考、像方主面位置lH’、出瞳距lp’、理想像高y0’、球差、位置色差、子午场曲xt’、弧矢场曲xs’、像散Δxts’、实际像高、相对畸变、绝对畸变、倍率色差、子午慧差(不考虑符号,绝对值正确即可)具体计算时每个都有对应的函数(留出来,我自己编写)

filetype

import tkinter from tkinter import ttk from tkinter import messagebox from tkinter import * import csv #定义公共变量 global k,maxrecno,xm,xb,nl,rw,sx,yy,item_id,cr1,image1,image2,image3,label11,jpgname def add_student(): #录入数据 global maxrecno,xm,xb,nl,rw,sx,yy def search_student(): #查询 global maxrecno,xm,xb,nl,rw,sx,yy def delete_student(): #删除 global maxrecno,xm,xb,nl,rw,sx,yy def update_student(): #修改 global maxrecno,xm,xb,nl,rw,sx,yy def brows_student(): #浏览 #清空tree clear1() #往tree中填入数据,以显示 with open('students.csv', 'r', newline='') as file: reader = csv.reader(file) i=1 for row in reader: tree.insert('',i,text=i,values=(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])) i+=1 def view_student():#定义视图 global maxrecno,xm,xb,nl,rw,sx,yy def clear(): #把10个接收窗口清空 entry1.delete(0,len(entry1.get())) entry2.delete(0,len(entry2.get())) entry3.delete(0,len(entry3.get())) entry4.delete(0,len(entry4.get())) entry5.delete(0,len(entry5.get())) entry6.delete(0,len(entry6.get())) entry7.delete(0,len(entry7.get())) entry8.delete(0,len(entry8.get())) entry9.delete(0,len(entry9.get())) entry10.delete(0,len(entry10.get())) def clear1(): #清空tree.insert() x1 = tree.get_children() for item in x1: tree.delete(item) k=1 def Login():#登录函数 global k Name = enterName.get() Pwd = enterPwd.get() if Name=='admin' and Pwd=='admin': window.wm_deiconify() #显示window主窗口 win2.withdraw() #隐藏win2登录子窗口 if k==3: messagebox.showerror('温馨提示','用户名或者密码输错3次了,你是在尝试? 退出!') Cancel() k+=1 def Cancel():#退出函数 win2.quit() window.quit() #退出 window.destroy() #撒销进程 window = Tk() window.title("学生管理系统") window.geometry('1200x520+200+10') #定义命令按键 button0 = ttk.Button(window, text="清空录入区") button1 = ttk.Button(window, text="录入") button2 = ttk.Button(window, text="查询") button3 = ttk.Button(window, text="删除") button4 = ttk.Button(window, text="修改") button5 = ttk.Button(window, text="浏览数据") button6 = ttk.Button(window, text="统计视图") button0.place(x=300, y=450) button1.place(x=390, y=450) button2.place(x=480, y=450) button3.place(x=570, y=450) button4.place(x=660, y=450) button5.place(x=750, y=450) button6.place(x=840, y=450) #利用ttk的特性设置动感按键 style = ttk.Style(window) style.map('TButton',foreground=[('pressed', 'blue'),('active', 'red')]) #定义标签 L1 = Label(window, text='姓名:') L2 = Label(window, text='性别:') L3 = Label(window, text='年龄:') L4 = Label(window, text='籍贯:') L5 = Label(window, text='住址:') L6 = Label(window, text='电话:') L7 = Label(window, text='语文:') L8 = Label(window, text='数学:') L9 = Label(window, text='英语:') L10 = Label(window, text='总分:') L11 = Label(window, text=' 数 据 录 入 区 ',fg='red') L12 = Label(window, text=' 数 据 浏 览 区 ',fg='red') L13 = Label(window, text='相片') L1.place(x=10,y=50) L2.place(x=10,y=80) L3.place(x=10,y=110) L4.place(x=10,y=140) L5.place(x=10,y=170) L6.place(x=10,y=200) L7.place(x=10,y=230) L8.place(x=10,y=260) L9.place(x=10,y=290) L10.place(x=10,y=320) L11.place(x=40,y=15) L12.place(x=600,y=15) L13.place(x=85,y=490) #定义单行文本框 entry1 = ttk.Entry(window) entry2 = ttk.Entry(window) entry3 = ttk.Entry(window) entry4 = ttk.Entry(window) entry5 = ttk.Entry(window) entry6 = ttk.Entry(window) entry7 = ttk.Entry(window) entry8 = ttk.Entry(window) entry9 = ttk.Entry(window) entry10 = ttk.Entry(window) entry1.place(x=55,y=50) entry2.place(x=55,y=80) entry3.place(x=55,y=110) entry4.place(x=55,y=140) entry5.place(x=55,y=170) entry6.place(x=55,y=200) entry7.place(x=55,y=230) entry8.place(x=55,y=260) entry9.place(x=55,y=290) entry10.place(x=55,y=320) #创建tree表格,显示记录 tree =ttk.Treeview(window,show="headings",selectmode="browse",height=18) #只显示表头show="headings",height为tree窗口高度 #为tree设置垂直滚动条 yscrollbar = Scrollbar(window)#定义一个垂直滚动条 yscrollbar.pack(side=RIGHT,fill=Y)#放置在右边,亲充满 yscrollbar.config(command=tree.yview)#设置游动条的command回调函数yview() tree.configure(yscrollcommand=yscrollbar.set)#垂直游动条绑定多行文本框 #给tree指定位置(不能前于垂直滚动条,注意先后次序) tree.pack(padx=(230,10),pady=(50,30)) #指定位置x方向左230、右20,上50、下30,宽度为900-230-10=660 #定义一个tre表格框架 tree['columns']=('序号','姓名','性别','年龄','籍贯','住址','电话','语文','数学','英语','总分','相片名称') #设置列,总宽为900-230-10=660 tree.column('序号',width=50,anchor="center") tree.column('姓名',width=50,anchor="center") tree.column('性别',width=50,anchor="center") tree.column('年龄',width=50,anchor="center") tree.column('籍贯',width=50,anchor="center") tree.column('住址',width=200,anchor="center") tree.column('电话',width=100,anchor="center") tree.column('语文',width=70,anchor="center") tree.column('数学',width=70,anchor="center") tree.column('英语',width=70,anchor="center") tree.column('总分',width=70,anchor="center") tree.column('相片名称',width=100,anchor="center") #设置表头 tree.heading('序号',text='序号') tree.heading('姓名',text='姓名') tree.heading('性别',text='性别') tree.heading('年龄',text='年龄') tree.heading('籍贯',text='籍贯') tree.heading('住址',text='住址') tree.heading('电话',text='电话') tree.heading('语文',text='语文') tree.heading('数学',text='数学') tree.heading('英语',text='英语') tree.heading('总分',text='总分') tree.heading('相片名称',text='相片名称') #定义与tree关联的鼠标事件,通过鼠标在tree中选择,把选中的记录转入左边7个单行文本框内显示 def mouseselect(event): global item_id,cr1,jpgname # 获取选中项的ID item_id = event.widget.selection()[0] # 获取该项的所有列的值 cr1 = event.widget.item(item_id, "values") #把7个接收窗口清空 clear() #通过鼠标选择,把记录内容放进单行文本框 entry1.insert(0,cr1[1]) entry2.insert(0,cr1[2]) entry3.insert(0,cr1[3]) entry4.insert(0,cr1[4]) entry5.insert(0,cr1[5]) entry6.insert(0,cr1[6]) entry7.insert(0,cr1[7]) entry8.insert(0,cr1[8]) entry9.insert(0,cr1[9]) entry10.insert(0,cr1[10]) jpgname=cr1[11] showjpg() tree.bind('<<TreeviewSelect>>',mouseselect) #tree绑定鼠标单击 #定义登录窗口 win2=tkinter.Toplevel(window) win2.title('登录验证') win2.config(background="LavenderBlush") win2.geometry('270x170+800+200') #10左距离 10上距离 # 创建登录账户的标签 labname = tkinter.Label(win2,text=' 用户名 ',justify=tkinter.RIGHT,bg='pink',width=10) labPwd = tkinter.Label(win2,text=' 密 码',justify=tkinter.RIGHT,bg='pink',width=10) labname.place(x=40,y=20) labPwd.place(x=40,y=50) # label 标签(用户名和密码的变量) varName = StringVar() # 文字变量储存器器 varName.set('guest') varPwd = StringVar() varPwd.set('123456') # 创建登录文本框,同时设置关联变量 enterName = tkinter.Entry(win2,width=12,textvariable=varName) enterPwd = tkinter.Entry(win2,show='*',width=12,textvariable=varPwd) enterName.place(x=130,y=20) enterPwd.place(x=130,y=50) # 创建登录按钮组件,并且设置按钮事件的处理函数 bOK = tkinter.Button(win2,text = '登录',bg='lightskyblue',width=7,command =Login) bCancel =tkinter.Button(win2,text='退出',bg='lightgray',width=7,command=Cancel) bOK.place(x=60 , y=100) bCancel.place(x=150,y=100) #首次进入系统,先显示数据 brows_student() window.withdraw() #隐藏window主窗口 win2.wm_deiconify() #显示win2登录子窗口 window.mainloop() 增加创新

jk186
  • 粉丝: 16
上传资源 快速赚钱