tkinter 怎么用Listbox做出多列的表格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tkinter 怎么用Listbox做出多列的表格相关的知识,希望对你有一定的参考价值。

参考技术A listbox不是表格,可以多列、多行。效果就像windows文件夹打开后的样子。
要做表格,可以使用表格控件。vb提供了两种。也可以在vb中插入excel表格。
参考技术B stbox不是表格,可以多列、多行。效果就像windows文件夹打开后的样子。
要做表格,可以使用表格控件。vb提供了两种。也可以在vb中插入excel表格。本回答被提问者采纳
参考技术C 使用Treeview
import tkinter
from tkinter import ttk #导入内部包
win=tkinter.Tk()
tree=ttk.Treeview(win)#表格
tree["columns"]=("姓名","年龄","身高")
tree.column("姓名",width=100) #表示列,不显示
tree.column("年龄",width=100)
tree.column("身高",width=100)
tree.heading("姓名",text="姓名-name") #显示表头
tree.heading("年龄",text="年龄-age")
tree.heading("身高",text="身高-tall")
tree.insert("",0,text="line1" ,values=("1","2","3")) #插入数据,
tree.insert("",1,text="line1" ,values=("1","2","3"))
tree.insert("",2,text="line1" ,values=("1","2","3"))
tree.insert("",3,text="line1" ,values=("1","2","3"))
tree.pack()
win.mainloop()
参考技术D

今天也遇到这个问题,找到了一个tkinter扩展的类,上来分享下

https://github.com/dmnfarrell/tkintertable

用于多列使用的 ListView 与 ListBox

【中文标题】用于多列使用的 ListView 与 ListBox【英文标题】:ListView vs. ListBox for multiple column usage 【发布时间】:2012-04-02 08:18:12 【问题描述】:

我目前正在为我的应用程序的 GUI 苦苦挣扎。我很难确定 ListBox 或 ListView 是否更“适合”数据的多列表示。

我更喜欢“干净”的代码,这种代码不会让人难以理解,因为意大利面条式代码和黑客方法会导致混乱。

ListBox 和 ListView 如何处理多列?

【问题讨论】:

@BryanCrosby,我现在正在处理列表数据。我了解 DataGridView 适用于数据库数据。 你说你有多列表示。那是一张桌子,这就是我推荐它的原因。你的数据结构是什么? @BryanCrosby,我的数据现在表示为一个列表。 Datagridview 适用于您希望在网格中显示的任何类型的数据。我尽可能使用列表控件,因为它们更轻,但是当您需要数据的灵活性和多列表示时,datagridview 很难被击败。 【参考方案1】:

ListView 对于数据的多列表示要好得多。但是,它似乎比简单的 ListBox 代码更复杂/丑陋。

由于许多原因,可调整大小的列等等,它仍然要好得多。

我不认为 ListBox 有多个列,因此您必须在其中添加一些丑陋的东西。

http://www.xtremedotnettalk.com/showthread.php?t=93443

【讨论】:

我能在这两种类型上找到的所有示例都以有些混乱的代码结尾。但正如你所说, ListView 似乎更合适。你能在多列 ListView 上给出一个 coden-p 吗?谢谢。 ListBox 控件确实支持multiple columns。 “多列列表框将项目放置到所需的列中,使垂直滚动变得不必要。”我不认为它有帮助。 xtremedotnettalk.com/showthread.php?t=93443 有一个代码示例。我这里没有我的代码,否则我会从我的一个项目中给你一些东西【参考方案2】:

看看这个

https://***.com/a/227355/988830

虽然 listbox 用于单列,listview 用于多列,但答案完全取决于。

有时您可能需要多列列表,您需要在其中添加不同类型的子项。您不能使用 listview 绑定它们,因此在这种情况下使用 listbox 更好。但是如果你想使用 header 对它们进行排序,请使用 listview,因为它很简单。

总之,我想说的是,如果你只有多列数据,而如果你想做一些花哨的东西,比如按钮、树视图、扩展器等,那么使用 listview 再好不过了。ListBox 真的很酷。

谢谢, 奥姆卡

【讨论】:

【参考方案3】:

如果您希望能够直接从网格(如电子表格)编辑数据,DataGridView 是不错的选择。详细模式下的列表视图非常适合简单呈现数据列列表。据我所知,DataGridView 也更容易排序。

通常我会这样做:

private void UpdateListView()

   mListView.Items.Clear();
   foreach (Item item in mItems)
   
      ListViewItem listViewItem = 
         new ListViewItem(item.Value1.ToString())  Tag = item; 
      listViewItem.SubItems.Add(item.Value2.ToString());
      listViewItem.SubItems.Add(item.Value3.ToString());
      mListView.Items.Add(listViewItem);
   

需要在设计器中定义列,包括列标题文本和列宽。

使用 Tag = item; 部分,您将能够通过以下方式访问所选对象:

   if (mListView.SelectedIndices.Count <= 0)
      return;

   Item selectedItem = mListView.SelectedItems[0].Tag as Item;
   if (selectedItem == null)
      return;

   // do something with selectedItem

【讨论】:

【参考方案4】:

在这种情况下,DataGridView 肯定没有问题。

示例:

class Car

    public string Make  get; set; 
    public string Model  get; set; 
    public int Year  get; set; 

将数据加载到DataGridView的函数

private void LoadData()

    List<Car> cars = new List<Car>()
    
       new Car()  Make = "Subaru", Model = "Impreza", Year = 2005 ,
       new Car()  Make = "Ford", Model = "Mustang", Year = 1984 
    ;

    dataGridView1.DataSource = cars;

当然,从这里开始,事情可能会变得更加复杂,但如果您只是想以表格方式显示数据......这很简单。

【讨论】:

完美。正是我想要的。只需要添加一行代码来初始化数据源就可以了。 是否可以排除任何列或更改它们的顺序? @JavaCake:您可以使用它们的命名索引或序号访问列。例如DataGridView.Columns[0]。有一个属性DisplayIndex 控制它们的显示方式。还有一个Visible 属性控制可见性。

以上是关于tkinter 怎么用Listbox做出多列的表格的主要内容,如果未能解决你的问题,请参考以下文章

listbox的值怎么获取vba

Python如何改变tkinter.ttk.Treeview表格组件的每行的行高?

从 tkinter.Listbox 中提取项目列表

Python中tkinter中控件的使用(6.Listbox列表框(添加滚动条))

用于多列使用的 ListView 与 ListBox

Python中tkinter控件中的Listbox控件详解