Python:无边框列表框

问题描述 投票:0回答:4

我想要在我的 Tkinter GUI 中有一个表格 - 但似乎 Tkinter 没有表格元素。

所以我会选择两个列表框,但为了使它们看起来像表格,我需要去掉它们的边框。

python listbox tkinter border
4个回答
7
投票

您希望将边框宽度设置为零,但您还希望将突出显示厚度设置为零。 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()

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),并为整个小部件提供与原始列表框类似的外观,我将其包装在框架中,并赋予与默认列表框相同的边框样式。

同样值得一提的是,您需要正确设置绑定以使它们按预期滚动,仅绑定到滚轮和滚动条是不够的,因为当突出显示项目时可以使用箭头键移动列表,就像第二个一样本页示例:
一起滚动多个列表框 通过桑蒂克劳斯


1
投票

创建列表框时将

borderwidth
指定为 0。

例如:

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

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

0
投票

如果您想要 tkinter 中的表格,我建议使用树视图并将其设置为“标题”,这相当于表格。 https://www.pythontutorial.net/tkinter/tkinter-treeview/

© www.soinside.com 2019 - 2024. All rights reserved.