我正在处理一个树视图,其中一列(地址(中的文本不能放在一行中。我的代码如下:
# 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)
如何实现新行,以便当地址到达空间的末尾时,它从新行继续?当然,整排应该是相同的高度。
有一个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")))
只需对要包装的任何其他值调用此函数。