0

我正在研究一个树视图,其中一列(地址)中的文本不能放在一行中。我的代码如下所示:

# Create the invoice window
    invoice = Tk()
    invoice.title("Invoices")
    invoice.geometry("1800x1000")

    # Create treeview frame
    tree_frame = Frame(invoice)
    tree_frame.pack(pady=10)

    # Create scrollbar for treeview
    tree_scroll = Scrollbar(tree_frame)
    tree_scroll.pack(side=RIGHT, fill=Y)

    # Create treeview
    tree = ttk.Treeview(tree_frame, yscrollcommand=tree_scroll.set, selectmode="extended")
    tree.pack()

    # Configure scrollbar
    tree_scroll.config(command=tree.yview)

    # Define the columns of the treeview
    tree['columns'] = (
    "Invoice Number", "Company Name", "Company Address", "VAT Number", "Total", "Currency", "Invoice Date")

    # Place the columns
    tree.column("#0", width=0, stretch=NO)
    tree.column("Invoice Number", anchor=CENTER, width=140)
    tree.column("Company Name", anchor=CENTER, width=140)
    tree.column("Company Address", anchor=CENTER, width=140)
    tree.column("VAT Number", anchor=CENTER, width=140)
    tree.column("Total", anchor=CENTER, width=140)
    tree.column("Currency", anchor=CENTER, width=140)
    tree.column("Invoice Date", anchor=CENTER, width=140)

    # Create headings for columns
    tree.heading("#0", text="", anchor=W)
    tree.heading("Invoice Number", text="Invoice Number", anchor=CENTER)
    tree.heading("Company Name", text="Company Name", anchor=CENTER)
    tree.heading("Company Address", text="Company Address", anchor=CENTER)
    tree.heading("VAT Number", text="VAT Number", anchor=CENTER)
    tree.heading("Total", text="Total", anchor=CENTER)
    tree.heading("Currency", text="Currency", anchor=CENTER)
    tree.heading("Invoice Date", text="Invoice Date", anchor=CENTER)

如何实现一个新行,以便当地址到达空间末尾时,它会从新行继续?当然,整行应该是相同的高度。

4

1 回答 1

0

有一个minwidth选项可以设置可以收缩多少列的最小宽度,但我认为地址太长,而您想换行:

您需要为此导入textwrap模块:

import textwrap

首先,定义一个函数来换行:

def wrap(string, length=8):
    if len(companyAddress) >= 10: # this if loop is only for when you don't know the length of the address and want to add newline after it reaches certain length. Otherwise remove the if loop and leave the return statement in.
        
        return '\n'.join(textwrap.wrap(string, length))

就是这样。现在,如果要插入数据,只需在需要包装的值上调用函数。

tree.insert("", "end", iid=0, text="", values=("invoice number", ...(values)... ,wrap("insert company address here")))

只需在要包装的任何其他值上调用此函数。

于 2021-07-21T12:30:04.363 回答