【问题标题】:Is there any way to fix the column width in listbox in Tkinter?有没有办法修复 Tkinter 列表框中的列宽?
【发布时间】:2014-07-28 21:08:00
【问题描述】:

我想在列表框中显示一些项目。有些非常短,有些非常大(10-15 个字符)。如下图,

1. facebook  gowtham95****@gmail.com

2. gmail  someone@gmail.com

3. stackoverflow   stackusername

我想整齐地向他们展示......

1. facebook    gowtham95****@gmail.com

2. gmail       someone@gmail.com

3. stack..     stackusername

在 Tkinter 中是否可以修复列表框中的列宽?

还有一件事,我想在上面将其标记为 id、域和用户名。我不想使用标签。我想在列表框本身中提及它,还有吗?

【问题讨论】:

  • 也许可以试试TkinterTreeCtrl。见截图:TkTreeCtrl
  • 我刚刚尝试了您的建议。谢谢你。但是,在 Windows 中,我无法使用 tcltreectrl 库来做到这一点。导入成功。但是,在创建列表框时,它说 tcl error: can't find package tcltreectrl any questions ???
  • 列表框没有列,所以不,没有办法固定列表框中列的宽度。您如何尝试创建“列”?你真的在使用树视图小部件吗? (tkdocs.com/tutorial/tree.html)
  • 不,我使用的是空格。我从 sqlite3 数据库文件导入数据。 "对于光标中的行:row[0] + ' ' * 10 + row[1]

标签: python listbox tkinter


【解决方案1】:

您可以使用string formating - 但它需要一些monospaced font,并且您必须在列中找到最长的字符串。

import Tkinter as tk

master = tk.Tk()
master.geometry('600x100')

lb = tk.Listbox(master, font='monospace') # some monospaced font
lb.pack(fill=tk.BOTH, expand=1)

#---

data = [
    ('1', 'facebook', 'gowtham95****@gmail.com'),
    ('2', 'gmail', 'someone@gmail.com'),
    ('3', 'stackoverflow', 'stackusername')
]

longest_1 = max( len(x[1]) for x in data )
longest_2 = max( len(x[2]) for x in data )

for x in data:
    line = '%s | %*s | %*s |' % (x[0], -longest_1, x[1], -longest_2, x[2])    
    lb.insert(tk.END, line)

#---

tk.mainloop()

【讨论】:

  • 需要知道,一件事。如果以防万一,如果条目长度更长,例如 "somethingtobedisplayeed" ,我希望它显示为 "something.."。上面的可以吗?
  • 您必须先将“somethingtobedisplayeed”更改为“somethin..”,然后才能将其插入列表框。 stackoverflow.com/questions/2872512/…
  • 如何使用treectrl或命名的东西?安装后出现错误。
  • 我没用过。你安装了TkTreeCtrl 吗? Tkinter 是 Tcl/Tk 的包装器,因此您需要安装 TkTreeCtrl(用于 Tcl)和 TkinterTreeCtrl(用于 Python)才能使用它。
  • 是的,我也安装了,导入也成功了。但是当我在我的程序中使用它时,我得到了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多