【问题标题】:Python: Listbox without borderPython:无边框列表框
【发布时间】:2014-11-28 11:48:29
【问题描述】:

我想要一个表格,但是当我意识到python中没有表格时,我决定用两个列表框来修复它。

重点是,我不希望它们之间有边界。

所以我的问题是:如何从 Python 中的 Tk 列表框中删除边框?

就算会变白我也有办法……

【问题讨论】:

  • 你能告诉我们你的代码吗?另外,我不确定您所说的“python 中没有表”是什么意思?
  • @leo :看起来 ProgrammingDonkey 想在他们的 tkinter GUI 中放置一个 HTML 样式的表格。
  • ProgrammingDonkey, Tk 只是可以在 Python 中使用的几个 GUI 工具包之一。它不是特定于 Python 的,我们很多人甚至没有安装它,而是更喜欢在我们的程序中使用更强大的系统,如 GTK 或 Qt 等。
  • @PM2Ring:为什么你认为GTK或QT更强大?你如何定义“权力”? Tkinter 对于大多数任务来说已经足够强大了。我不会在其中编写下一个 Photoshop,但对于大多数项目来说,它的功能相当强大。
  • @PM2Ring 哦,我没看到 tkinter 标签

标签: python listbox tkinter border


【解决方案1】:

在创建列表框时将 borderwidth 指定为 0。

例如:

from Tkinter import *  # from tkinter import *   (Python 3.x)

root = Tk()
lb = Listbox(borderwidth=0)  # <---
lb.pack()
root.mainloop()

【讨论】:

    【解决方案2】:

    我认为你能做到的最好的就是:

    import tkinter as tk
    
    root = tk.Tk()
    
    wrapper = tk.Frame(root, bd=2, relief="sunken")
    L1 = tk.Listbox(wrapper, bd=0)
    L2 = tk.Listbox(wrapper, bd=0)
    
    L1.grid(column = 1, row = 1)
    L2.grid(column = 2, row = 1)
    
    wrapper.pack()
    
    root.mainloop()
    

    注意将每个列表框的边框设置为 0,(bd=0) 并为整个小部件提供与原始列表框相似的外观,我将其包装在一个框架中,并给出与默认列表框相同的边框样式.

    同样值得一提的是,您需要正确绑定才能使它们按预期滚动,仅绑定到滚轮和滚动条是不够的,因为在突出显示项目时可以使用箭头键移动列表,例如此页面上的第二个示例:
    scrolling multiple listboxes together 通过桑蒂克劳斯

    【讨论】:

    • 没问题,如果您对此感到满意,可以将其标记为答案,并且作为仅供参考,您可以扩展该方法以执行 2 个以上的列表框,如果您打算要在应用程序中大量使用它,最好将其子类化,因为这样可以避免您必须手动输入它们的链接方式。
    【解决方案3】:

    您希望将borderwidth 设置为零,但您也希望将highlightthickness 设置为零。 Highlightthickness 表示当它具有键盘焦点时围绕整个小部件的矩形。最后,当您使用 pack 或 grid 时,请确保不要在它们之间添加任何填充。

    如果要完成两个小部件合一的错觉,请将它们放在一个框架中,并给框架一个边框宽度和浮雕。 将 Tkinter 导入为 tk

    class Example(tk.Frame):
        def __init__(self, parent):
            tk.Frame.__init__(self, parent, borderwidth=1, relief="sunken")
    
            lb1 = tk.Listbox(self, borderwidth=0, highlightthickness=0)
            lb2 = tk.Listbox(self, borderwidth=0, highlightthickness=0)
    
            lb1.pack(side="left", fill="both", expand=True)
            lb2.pack(side="left", fill="both", expand=True)
    
            lb1.insert(0, "left")
            lb2.insert(0, "right")
    
    if __name__ == "__main__":
        root = tk.Tk()
        Example(root).pack(fill="both", expand=True, padx=8, pady=8)
        root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 2017-05-27
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2019-04-12
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多