【问题标题】:How to insert tabs \t in a listbox?如何在列表框中插入制表符 \t?
【发布时间】:2018-06-16 07:22:22
【问题描述】:
from tkinter import *
import tkinter

root = Tk()

name = 'Jeff'

dob = '01/01/2000'

gender = 'male'

text = str(name)+'\t'+str(dob)+'\t'+str(gender)

Lb = Listbox(root)
Lb.insert(0, text)
Lb.pack()

Lb.selection_set(0)

root.mainloop()

运行此代码时,它会显示名称,然后是 dob,然后是男性,就像被询问的那样,但它不显示它们之间的选项卡。我知道有一个简单的解决方案,只需插入手指空格而不是制表符,但这是一个更大的项目的一部分,手指空格会使代码非常尴尬且处理效率低下。有什么想法吗?

【问题讨论】:

  • 我确信使用 Tk 本身有更好的解决方案,但您可以尝试使用 spacer.join([name, dob, gender]),您已将 spacer 设置为 4 或 8 个空格的字符串。此外,调用 str(s) 其中 s 已经是一个字符串并没有任何用处。
  • 我不太明白,我该如何实现'spacer.join'?

标签: python tkinter tabs listbox


【解决方案1】:

在列表框中插入选项卡的方法正是您所做的。您只是碰巧插入了与制表位对齐的数据。要了解我的意思,请将以下行添加到您的代码中:

Lb.insert("end", "1\t2\t3\t4\t5")

您会看到日期和“男性”一词与某些制表位完全一致。不幸的是,您无法在列表框中配置制表位。

如果您需要可配置的制表位,则必须使用带有一些自定义绑定的 Text 小部件来模拟列表框。

【讨论】:

  • 抱歉,我不知道如何添加图片。当我插入您建议的这一行时,它不会执行任何制表位...它会执行“Jeff01/01/2000male”和“12345”而没有任何制表位。
  • 'from tkinter import * import tkinter root = Tk() name = 'Jeff' dob = '01/01/2000' 性别 = 'male' text = str(name)+'\t' +str(dob)+'\t'+str(gender) Lb = Listbox(root) Lb.insert(0, text) Lb.insert("end", "1\t2\t3\t4\t5") Lb .pack() Lb.selection_set(0) root.mainloop()'
  • 再次抱歉,我必须学习如何正确格式化,我做错了什么或误解了您的建议吗?谢谢
  • 有什么方法可以给你看一张照片吗?或者可能是不同版本的 Python?
  • 我刚刚了解到列表框中的选项卡适用于 mac OS,但在 Windows 中无法正确呈现/显示...link
【解决方案2】:

经过研究,我了解到如果你想在 tkinter 列表框中插入一个标签 \t,它在 Windows 操作系统上不起作用,我不知道为什么......

我已经设法从www.reddit.com 中找到由wiffleball687 先前创建的解决方案。

import tkinter

def tabify(s, tabsize = 4):
    ln = ((len(s)/tabsize)+1)*tabsize
    return s.ljust(ln)

rt = tkinter.Tk()
listbox = tkinter.Listbox(rt, font = 'Courier') #change to a fixed width font
listbox.pack()
listbox.insert(tkinter.END, tabify('a') + 'b')
rt.mainloop()

【讨论】:

    【解决方案3】:

    我认为目前没有任何方法可以在您的 Tkinter GUI 中提供此功能。

    经过一些研究,我找到了一种使用 Text 小部件在 GUI 中格式化文本的方法。

    但是,我尝试在 列表框 中使用此小部件没有成功。

    这是一个简单的代码示例,用于演示 Text 小部件的使用。

    from tkinter import *
    import tkinter
    
    root = Tk()
    
    name = 'Jeff'
    dob = '01/01/2000'
    gender = 'male'
    
    text = Text(root, height = 2, width = 30)
    text.insert(END, str(name)+'\t'+str(dob)+'\t'+str(gender))
    text.pack()
    
    root.mainloop()
    

    当我尝试将小部件 Text 插入到列表框中时,就像您在上面的代码中那样,我得到了这个结果。

    我希望这对您有所帮助,如果您有任何其他问题,请随时在下面发表评论!

    【讨论】:

    • 谢谢,这确实有帮助,但是我的目标是一个列表框,因为用户可以在不更改文本的情况下选择并突出显示其中的行。虽然,我确信我可以尝试以不同的方式将您的方法实现到列表框中。我只需要继续努力。
    • 不幸的是,Tkinter 并不是最好的 GUI 编程界面。它的功能在很多地方都显示了它的局限性:/
    • 不幸的是,我也学到了这一点,但是在我的项目中为时已晚。但是下一次,你会推荐什么接口 Python 库?
    • 虽然我没有亲自使用过,但我已经看到很多用Kivy开发的优秀用户界面。
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2021-08-30
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多