• python代码修改


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2301_78069275 2024-06-03 22:13 采纳率: 62.5% 浏览 2 首页/ 编程语言 / python代码修改 python #帮我看看代码,有问题,表格是14列200行的,但是水平滚动条不对,导入数据后页面布局会改变 import pandas as pd import tkinter as tk from tkinter import ttk from tkinter import filedialog, messagebox import ttkbootstrap as ttkb import string from ttkbootstrap.tooltip import ToolTip import copy # 读取数据 fraud = pd.read_csv("E:\\creditcard.csv\\creditcard.csv") # 创建Tkinter窗口 root = ttkb.Window() root.title("DataFrame in Tkinter") root.geometry("1500x1000+1000+700") style = ttkb.Style() style.theme_use("lumen") style.configure("Custom.TButton", font=("'System'",15), padding=15) style.configure("Custom.Treeview", rowheight=80) # 创建左侧和右侧的Frame left_frame = tk.Frame(root,relief='ridge',borderwidth=1) right_frame = tk.Frame(root,relief='ridge',borderwidth=1) left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) right_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) tree = ttk.Treeview(left_frame) # 创建树状结构 treeF1 = tree.insert("", 0, "导入数据", text="导入数据", values=("F1")) treeF2 = tree.insert("", 1, "数据预处理", text="数据预处理", values=("F2")) treeF3 = tree.insert("", 2, "特征工程", text="数据工程", values=("F3")) treeF4 = tree.insert("", 3, "模型训练", text="模型训练", values=("F4")) treeF5 = tree.insert("", 4, "性能评估", text="性能评估", values=("F5")) # 二级目录 treeF1_1 = tree.insert(treeF1, 0, "部分数据展示", text="部分数据展示", values=("F1_1")) treeF2_1 = tree.insert(treeF2, 0, "数据描述", text="数据描述", values=("F2_1")) treeF2_2 = tree.insert(treeF2, 1, "缺失值查看", text="缺失值查看", values=("F2_2")) treeF2_3 = tree.insert(treeF2, 2, "数据标准化", text="数据标准化", values=("F2_3")) treeF3_1 = tree.insert(treeF3, 0, "标签分布可视化", text="标签分布可视化", values=("F3_1")) treeF3_2 = tree.insert(treeF3, 1, "数据探索", text="数据探索", values=("F3_2")) treeF4_1 = tree.insert(treeF4, 0, "SMOTE过采样", text="SMOTE过采样", values=("F4_1")) treeF4_2 = tree.insert(treeF4, 1, "支持向量机", text="支持向量机", values=("F4_2")) treeF5_1 = tree.insert(treeF5, 0, "Accuracy", text="Accuracy", values=("F5_1")) treeF5_2 = tree.insert(treeF5, 1, "混淆矩阵", text="混淆矩阵", values=("F5_2")) treeF5_3 = tree.insert(treeF5, 2, "ROC曲线", text="ROC曲线", values=("F5_3")) # 三级目录 treeF3_2_1 = tree.insert(treeF3_2, 0, "两种标签的amount对比", text="两种标签的amount对比", values=("treeF3_2_1")) treeF3_2_2 = tree.insert(treeF3_2, 1, "两种标签的time对比", text="两种标签的time对比", values=("treeF3_2_2")) treeF3_2_3 = tree.insert(treeF3_2, 2, "其他特征分布", text="其他特征分布", values=("treeF3_2_3")) tree.pack() canvas = tk.Canvas(right_frame, bg="white") canvas.pack(fill=tk.BOTH, expand=True) def display_data(): # 清除画布内容 canvas.delete("all") # 创建一个新的Treeview组件 data_tree = ttk.Treeview(canvas, columns=list(fraud.columns), show="headings",height=canvas.winfo_height()) # 设置列标题 for col in fraud.columns: data_tree.heading(col, text=col) # 插入数据 for index, row in fraud.iterrows(): data_tree.insert("", "end", values=list(row)) # 将Treeview组件添加到画布 canvas.create_window(0, 0, anchor="nw", window=data_tree) # 创建竖直滚动条 v_scrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL, command=data_tree.yview) v_scrollbar.pack(side=tk.RIGHT, fill=tk.Y) data_tree.configure(yscrollcommand=v_scrollbar.set) # 创建水平滚动条 h_scrollbar = tk.Scrollbar(canvas, orient=tk.HORIZONTAL, command=data_tree.xview) h_scrollbar.pack(side=tk.BOTTOM, fill=tk.X) data_tree.configure(xscrollcommand=h_scrollbar.set) # 更新画布的滚动区域 canvas.configure(scrollregion=canvas.bbox("all")) # 绑定点击事件 tree.bind("<>", lambda event: display_data() if tree.focus() == "部分数据展示" else None) # 启动Tkinter主循环 root.mainloop() 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 阿里嘎多学长 2024-06-03 22:13
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      在您的代码中,有几个地方需要修改以确保水平滚动条能够正确工作,并且页面布局在导入数据后保持不变。

      1. 设置Treeview的列宽度:在display_data函数中,您需要设置Treeview的列宽以确保所有列都能被正确显示。

      2. 调整画布和滚动条的配置:您需要确保画布的尺寸能够适应Treeview的大小,并且滚动条能够正确地与Treeview的视图同步。

      3. 调整窗口的初始大小:您可能需要调整窗口的初始大小,以确保在加载数据后窗口不会自动调整大小。

      以下是修改后的代码示例:

      # ...[省略之前的代码]...
      
      def display_data():
          # 清除画布内容
          canvas.delete("all")
          
          # 创建一个新的Treeview组件
          data_tree = ttk.Treeview(canvas, columns=list(fraud.columns), show="headings")
          
          # 设置列标题
          for col in fraud.columns:
              data_tree.heading(col, text=col)
              data_tree.column(col, width=int(canvas.winfo_width() / len(fraud.columns)), anchor='center')
          
          # 插入数据
          for index, row in fraud.iterrows():
              data_tree.insert("", "end", values=list(row))
          
          # 将Treeview组件添加到画布
          canvas.create_window(0, 0, anchor="nw", window=data_tree)
          
          # 创建竖直滚动条
          v_scrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL, command=data_tree.yview)
          v_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
          data_tree.configure(yscrollcommand=v_scrollbar.set)
          
          # 创建水平滚动条
          h_scrollbar = tk.Scrollbar(canvas, orient=tk.HORIZONTAL, command=data_tree.xview)
          h_scrollbar.pack(side=tk.BOTTOM, fill=tk.X)
          data_tree.configure(xscrollcommand=h_scrollbar.set)
          
          # 更新画布的滚动区域
          canvas.configure(scrollregion=canvas.bbox("all"))
      
      # ...[省略之后的代码]...
      

      注意事项

      • 我将height=canvas.winfo_height()替换为不指定高度,这样Treeview的高度将自动调整以适应内容。
      • 我为每个列设置了宽度,这里假设列数是固定的,并且画布宽度均匀分配给每个列。
      • 我移除了data_tree.pack(),因为我们通过canvas.create_window将Treeview添加到画布上。

      参考资料

      • Tkinter官方文档:Python Tkinter 文档
      • ttkbootstrap库文档:[ttkbootstrap GitHub页面](https://github.com/ttkbootstrap ttkbootstrap)

      请注意,这些修改是基于您提供的代码片段。如果您的应用程序有其他特定的布局要求或行为,可能需要进一步的调整。

      展开全部

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-03 22:13
      关注

      引自免费微信小程序:皆我百晓生

      在您的代码中,水平滚动条可能没有正确显示是因为在创建data_tree时,没有设置columnwidth属性来限制每一列的宽度。为了确保水平滚动条正常工作,您需要为每一列指定一个合适的宽度。此外,当数据框的大小发生变化时,画布的滚动区域也需要动态更新。您可以按照以下修改后的代码进行操作:

      import pandas as pd
      import tkinter as tk
      from tkinter import ttk
      from tkinter import filedialog, messagebox
      import ttkbootstrap as ttkb
      import string
      from ttkbootstrap.tooltip import ToolTip
      import copy
      
      # 读取数据
      fraud = pd.read_csv("E:\\creditcard.csv\\creditcard.csv")
      
      # 计算列宽(根据最大长度)
      max_lengths = fraud.applymap(lambda x: len(str(x))).max()
      col_widths = {c: max_lengths[c] * 15 + 20 for c in max_lengths.index}
      
      # 创建Tkinter窗口
      root = ttkb.Window()
      root.title("DataFrame in Tkinter")
      root.geometry("1500x1000+1000+700")
      style = ttkb.Style()
      style.theme_use("lumen")
      style.configure("Custom.TButton", font=("'System'",15), padding=15)
      style.configure("Custom.Treeview", rowheight=80)
      
      # 创建左侧和右侧的Frame
      left_frame = tk.Frame(root, relief='ridge', borderwidth=1)
      right_frame = tk.Frame(root, relief='ridge', borderwidth=1)
      
      left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
      right_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
      
      tree = ttk.Treeview(left_frame)
      # 创建树状结构
      ...
      
      # 三级目录
      ...
      
      # 二级目录
      ...
      
      # 创建Treeview组件并配置列宽
      data_tree = ttk.Treeview(canvas, columns=list(fraud.columns), show="headings", height=canvas.winfo_height(), columnwidth=col_widths)
      ...
      
      # 绑定点击事件
      ...
      
      # 更新画布的滚动区域
      def update_scrollregion(event):
          canvas.configure(scrollregion=canvas.bbox("all"))
      
      data_tree.bind("", update_scrollregion)
      
      # 启动Tkinter主循环
      root.mainloop()
      

      在这个版本中,我首先计算了数据框中每一列的最大字符串长度,并基于此设置了每列的宽度。同时,我还添加了一个名为update_scrollregion的函数,它会在data_tree的尺寸变化时更新画布的滚动区域。这样,即使数据框的大小发生改变,滚动条也会正常工作。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Java - 浅析 Comparable 和 Comparator
    k8s审计
    JAVA线程的创建和使用
    Remote Desktop Service (RDS) 远程桌面服务漏洞简介 BlueKeep DejaBlue
    CVE-2019-1388 UAC提权实战
    Java框架 SpringMVC--完全注解配置
    训练和测试的loss不下降,并且精度超低
    关于字符拼接
    Docker入门概述
    java计算机毕业设计Web企业客户管理系统源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://ask.csdn.net/questions/8113582