[英]how to scroll the desired columns of treeview in tkinter
我正在一個GUI應用程序上,將從數據庫中獲取一些數據並將其顯示在樹視圖中。 但是問題是我的樹狀視圖大約有20列,這是很多的方法。 我的意思是整個應用程序都不適合我的屏幕。
因此,我最初只希望顯示2-3列,而我希望其余的列通過滾動條可見。
我已經使用“ displaycolumns”選項來顯示前三列,並且也創建了滾動條,但是我無法弄清楚如何通過滾動條使其余列可見。
以下是我的代碼,我刪除了button方法和數據庫功能以簡化它
從tkinter將tkinter作為tk導入從tkinter導入ttk導入openpyxl導入文件對話框將tkinter.font導入為tkFont
class MainWindow(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
#Creating Geometry Of the window
#self.geometry("500x500+0+0")
self.title("Test Software")
#Creating Labels
self.agreement_number_label = tk.Label(text="Agreement Number")
self.area_office_label = tk.Label(text="Area office")
self.branch_label = tk.Label(text="Branch")
self.customer_name_label = tk.Label(text="Customer Name")
self.model_label = tk.Label(text="Model")
self.registered_number_label = tk.Label(text="Registered Number")
self.engine_number_label = tk.Label(text="Engine Number")
self.chasis_number_label = tk.Label(text="Chasis Number")
self.make_label = tk.Label(text="Make")
#creating entry fields variables
self.agreement_number = tk.StringVar()
self.area_office = tk.StringVar()
self.branch = tk.StringVar()
self.customer_name = tk.StringVar()
self.model = tk.StringVar()
self.registered_number = tk.StringVar()
self.engine_number = tk.StringVar()
self.chasis_number = tk.StringVar()
self.make = tk.StringVar()
#creating Entry Fields
self.agreement_number_entry = tk.Entry(textvariable = self.agreement_number)
self.area_office_entry = tk.Entry(textvariable = self.area_office)
self.branch_entry = tk.Entry(textvariable = self.branch)
self.customer_name_entry = tk.Entry(textvariable = self.customer_name)
self.model_entry = tk.Entry(textvariable = self.model)
self.registered_number_entry = tk.Entry(textvariable = self.registered_number)
self.engine_number_entry = tk.Entry(textvariable = self.engine_number)
self.chasis_number_entry = tk.Entry(textvariable = self.chasis_number)
self.make_entry = tk.Entry(textvariable = self.make)
#Adding Labels and Entry Fields to the grid
#1st Row Fields
self.agreement_number_label.grid(row=0,column=0,pady=(25,0),sticky="w",padx=(20,0))
self.agreement_number_entry.grid(row=0,column=1,pady=(25,0),sticky="w")
self.area_office_label.grid(row=0,column=2,pady=(25,0),sticky="w")
self.area_office_entry.grid(row=0,column=3,pady=(25,0),sticky="w")
self.branch_label.grid(row=0,column=4,pady=(25,0),sticky="w")
self.branch_entry.grid(row=0,column=5,pady=(25,0),sticky="w",padx=(0,20))
#2nd row fields
self.customer_name_label.grid(row=1,column=0,sticky="w",padx=(20,0))
self.customer_name_entry.grid(row=1,column=1,sticky="w")
self.model_label.grid(row=1,column=2,sticky="w")
self.model_entry.grid(row=1,column=3,sticky="w")
self.registered_number_label.grid(row=1,column=4,sticky="w")
self.registered_number_entry.grid(row=1,column=5,sticky="w",padx=(0,20))
#3rd Row Fields
self.chasis_number_label.grid(row=2,column=0,sticky="w",padx=(20,0))
self.chasis_number_entry.grid(row=2,column=1,sticky="w")
self.engine_number_label.grid(row=2,column=2,sticky="w")
self.engine_number_entry.grid(row=2,column=3,sticky="w")
self.make_label.grid(row=2,column=4,sticky="w")
self.make_entry.grid(row=2,column=5,sticky="w",padx=(0,20))
#Creating a search button
self.search_button = tk.Button(text = "Search Record",width=25)
#Adding the Search Button into the grid
self.search_button.grid(row=3,column=0,columnspan=6,pady=10)
#Adding a Seperator to the grid
ttk.Separator(orient="horizontal").grid(row=4,columnspan=6,sticky="ew")
#Creating A Treeview
self.treeview = ttk.Treeview(height=6)
self.treeview['columns'] = ("One","Two","Three")
self.treeview.column('#0',width=100)
self.treeview.heading("#0", text="Testing")
self.treeview.heading("One", text="Column A")
self.treeview.heading("Two", text="Column B")
self.treeview.heading("Three", text="Column C")
self.treeview.grid(row=5,rowspan=5,column=0,columnspan=4,pady=(10,0))
#Adding Default Data to The Treeview
for i in range(10):
self.treeview.insert("" , "end", text="Line "+str(i), values=("1A","1b"))
#Creating a treeview scrollbar
self.vertical_scrollbar = tk.Scrollbar(orient='vertical')
self.horizontal_scrollbar = tk.Scrollbar(orient='horizontal')
#adding scrollbars to the grid
self.vertical_scrollbar.grid(row=5,column=4,rowspan=6)
self.horizontal_scrollbar.grid(row=10,column=0,columnspan=4)
#configuring scrolls to treeview
self.horizontal_scrollbar.configure(command=self.treeview.xview)
self.vertical_scrollbar.configure(command=self.treeview.yview)
#configuring treeview to Scrollbar
self.treeview.configure(yscrollcommand=self.vertical_scrollbar.set)
self.treeview.configure(xscrollcommand=self.horizontal_scrollbar.set)
#Creating buttons
self.view_all_record_btn = tk.Button(text="View All Records",width=15)
self.add_record_btn = tk.Button(text="Add Record",width=15)
self.edit_record_btn = tk.Button(text="Edit Record",width=15)
self.delete_record_btn = tk.Button(text="Delete Record",width=15)
self.upload_file_btn = tk.Button(text="Upload File",width=15)
#Adding Buttons to the Grid
self.view_all_record_btn.grid(row=5,column=5,pady=(10,0))
self.add_record_btn.grid(row=6,column=5)
self.edit_record_btn.grid(row=7,column=5)
self.delete_record_btn.grid(row=8,column=5)
self.upload_file_btn.grid(row=9,column=5,pady=(0,20))
root = MainWindow()
root.mainloop()
我的問題是我必須在此處添加大約20列,但我一次只想顯示3-4列,其余的列只能通過滾動條看到,我的行滾動條工作正常,但我不知道該怎么做列
謝謝
歡迎。 我相信您的問題取決於您的布局管理器設置。 對於網格系統,我通過調整相關框架的.rowconfigure
和.columnconfigure
設置實現了您想要的。 如果正確,則應該能夠最初顯示2-3列,然后在需要在一個樹形視圖中全部顯示時使用xscrollbar查看其他“隱藏”的17-18列。
順便說一句,當您在問題中包含mvce代碼時,社區可以提供更好的幫助。 這是代碼的最小版本,足以重現您的問題並為其他人提供幫助。
基於@Sun Bear的答案和此網站 ,我實現了TreeView組合水平滾動條的版本。 確實是.rowconfigure
和的問題. columnconfigure
. columnconfigure
。 您可以運行下面的示例代碼,您將了解其工作方式。 您還可以在下圖中看到執行結果。
try:
from tkinter import *
from tkinter import ttk
except ImportError:
from Tkinter import *
from Tkinter import ttk
root = Tk()
content = ttk.Frame(root, padding=(3,3,12,12))
# initialize a TreeView
myTreeView = ttk.Treeview(content)
myTreeView["columns"] = ("Index", "Value", "Price", "LAST_PRICE")
myTreeView.column("Index", stretch=False, width=150)
myTreeView.column("Value", stretch=False, width=100)
myTreeView.column("Price", stretch=False, width=100)
myTreeView.column("LAST_PRICE", stretch=False, width=100)
myTreeView.heading("Index", text="Index")
myTreeView.heading("Value", text="Value")
myTreeView.heading("Price", text="Price")
myTreeView.heading("LAST_PRICE", text="Last Price")
# attach a Horizontal (x) scrollbar to the frame
treeXScroll = ttk.Scrollbar(content, orient=HORIZONTAL)
treeXScroll.configure(command=myTreeView.xview)
myTreeView.configure(xscrollcommand=treeXScroll.set)
# initialize the Label and Entry
namelbl = ttk.Label(content, text="Name")
name = ttk.Entry(content)
# initialize Checkbuttons
onevar = BooleanVar()
twovar = BooleanVar()
threevar = BooleanVar()
onevar.set(True)
twovar.set(False)
threevar.set(True)
one = ttk.Checkbutton(content, text="One", variable=onevar, onvalue=True)
two = ttk.Checkbutton(content, text="Two", variable=twovar, onvalue=True)
three = ttk.Checkbutton(content, text="Three", variable=threevar, onvalue=True)
# initialize Buttons
ok = ttk.Button(content, text="Okay")
cancel = ttk.Button(content, text="Cancel")
# set position of all above objects by grid
content.grid(column=0, row=0, sticky=(N, S, E, W))
myTreeView.grid(column=0, row=0, columnspan=3, rowspan=2, sticky=(N, S, E, W))
treeXScroll.grid(column=0, row=3, columnspan=3, sticky=W + E)
namelbl.grid(column=3, row=0, columnspan=2, sticky=(N, W), padx=5)
name.grid(column=3, row=1, columnspan=2, sticky=(N, E, W), pady=5, padx=5)
one.grid(column=0, row=4)
two.grid(column=1, row=4)
three.grid(column=2, row=4)
ok.grid(column=3, row=4)
cancel.grid(column=4, row=4)
# Handling Resize
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
content.columnconfigure(0, weight=3)
content.columnconfigure(1, weight=3)
content.columnconfigure(2, weight=3)
content.columnconfigure(3, weight=1)
content.columnconfigure(4, weight=1)
content.rowconfigure(1, weight=1)
# run UI
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.