Tkinter Ttk treeview фиксированная ширина и высота
Я работаю над пользовательским интерфейсом, в котором у меня есть разные вкладки с разными основными представлениями, управляемыми фреймами customtkinter. Я создал древовидную структуру на своем главном экране, которая в конечном итоге будет читать БД, однако сейчас у меня есть фиктивные данные. Я хочу, чтобы древовидная структура была вынуждена занимать весь кадр (self.frame2). Я установил и настроил полосы прокрутки. Пожалуйста, игнорируйте подсчет чисел на главной странице.
self.my_tree = ttk.Treeview(master=self.tree_frame, height=45, yscrollcommand=tree_scrollY.set, xscrollcommand=tree_scrollX.set, selectmode="none")
С помощью этой строки я могу установить высоту (не уверен, что именно означает это число, может быть, строки?). Однако я не могу установить ширину. Таблица должна занимать все основное пространство и прокручиваться слева направо и сверху вниз для обработки переполнения.
Фрагмент кода для настройки древовидной структуры приведен ниже.
def open_main(self):
self.closeWindows()
self.activeWindow = 2
# Configure Main Viewing Frame
self.frame2 = customtkinter.CTkFrame(master=self.master, width=self.frameSizeW, height=self.frameSizeH, corner_radius=0, fg_color="transparent")
self.frame2.place(x=self.framePosX, y=self.framePosY)
# Main Viewing Frame --> Title
title = customtkinter.CTkLabel(master=self.frame2, text="Main Frame", font=customtkinter.CTkFont(size=20, weight="bold"))
title.place(x=self.frameSizeW/2, y=20, anchor='center')
# Need To Grab Table Name --> Column Names --> Data
# Setup Scrollable Frame Window
self.tree_frame = customtkinter.CTkFrame(master=self.frame2)
self.tree_frame.place(x=self.frameSizeW/2, y=40, anchor='n')
tree_scrollY = customtkinter.CTkScrollbar(self.tree_frame, width=15)
tree_scrollY.pack(side='right', fill='y')
tree_scrollX = customtkinter.CTkScrollbar(self.tree_frame, height=15)
tree_scrollX.pack(side='bottom', fill='x')
# Setup Tree View selectmode="" prevents selecting item
self.my_tree = ttk.Treeview(master=self.tree_frame, height=45, yscrollcommand=tree_scrollY.set, xscrollcommand=tree_scrollX.set, selectmode="none")
# Configure the scrollbar
tree_scrollY.configure(command=self.my_tree.yview)
# Define Our Columns
self.my_tree['columns'] = ("Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza")
# Format Our Columns
self.my_tree.column("#0", width=0, minwidth=0, stretch='NO')
self.my_tree.column("Name", anchor='w', width=120, minwidth=25)
self.my_tree.column("ID", anchor='center', width=120, minwidth=25)
self.my_tree.column("Favourite Pizza", anchor='w', width=120, minwidth=25)
# Create Headings
self.my_tree.heading("#0", text="", anchor='w')
self.my_tree.heading("Name", text="Name", anchor='w')
self.my_tree.heading("ID", text="ID", anchor='center')
self.my_tree.heading("Favourite Pizza", text="Favourite Pizza", anchor='w')
self.my_tree.pack()
# Alternating Line Colour
self.my_tree.tag_configure('oddrow', background="orange")
self.my_tree.tag_configure('evenrow', background="lightblue")
Полный код ниже. Вам понадобятся только модули tkinter и пользовательский tkinter.
import tkinter
import customtkinter
from tkinter import ttk
# Custom Tkinter Setup
customtkinter.set_appearance_mode("Dark") # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme("dark-blue") # Themes: "blue" (standard), "green", "dark-blue"
class GuiPart(customtkinter.CTk):
def __init__(self, master):
super().__init__()
self.master = master
self.master.title("GVS AI V1_0")
# Configure Window Size
self.windowx = 1915
self.windowy = 1015
self.master.geometry(f"{self.windowx}x{self.windowy}+0+0")
self.master.resizable(width=False, height=False)
self.style = ttk.Style()
self.style.theme_use('clam')
# Configure Left Side Bar Frame
self.frame = customtkinter.CTkFrame(master=self.master, width=200, height=100, corner_radius=0)
self.frame.grid(row=0, column=0)
# Left Side Bar --> Title
title = customtkinter.CTkLabel(master=self.frame, text="GVS AI V1_1",
font=customtkinter.CTkFont(size=20, weight="bold"))
title.grid(row=0, column=0, padx=20, pady=10)
# Left Side Bar --> View
title = customtkinter.CTkLabel(master=self.frame, text="View:", font=customtkinter.CTkFont(size=14))
title.grid(row=1, column=0, padx=20, pady=5)
# Left Side Bar --> main
button1 = customtkinter.CTkButton(master=self.frame, text="Main", command=self.open_main)
button1.grid(row=2, column=0, padx=40, pady=10)
# Left Side Bar --> Setup Exit Button
console = customtkinter.CTkButton(master=self.frame, text='Exit', command=self.button_event)
console.grid(row=10, column=0, padx=40, pady=10)
# UI Button And Object Functions
self.framePosX = 220
self.framePosY = 0
self.frameSizeW = 1695 # Width & Height Of All Main Windows
self.frameSizeH = 1015
# Open Main window to start
self.activeWindow = 0
self.open_main()
self.activeWindow = 2
def button_event(self):
print("button pressed")
def open_main(self):
self.closeWindows()
self.activeWindow = 2
# Configure Main Viewing Frame
self.frame2 = customtkinter.CTkFrame(master=self.master, width=self.frameSizeW, height=self.frameSizeH, corner_radius=0, fg_color="transparent")
self.frame2.place(x=self.framePosX, y=self.framePosY)
# Main Viewing Frame --> Title
title = customtkinter.CTkLabel(master=self.frame2, text="Main Frame", font=customtkinter.CTkFont(size=20, weight="bold"))
title.place(x=self.frameSizeW/2, y=20, anchor='center')
# Need To Grab Table Name --> Column Names --> Data
# Setup Scrollable Frame Window
self.tree_frame = customtkinter.CTkFrame(master=self.frame2)
self.tree_frame.place(x=self.frameSizeW/2, y=40, anchor='n')
tree_scrollY = customtkinter.CTkScrollbar(self.tree_frame, width=15)
tree_scrollY.pack(side='right', fill='y')
tree_scrollX = customtkinter.CTkScrollbar(self.tree_frame, height=15)
tree_scrollX.pack(side='bottom', fill='x')
# Setup Tree View selectmode="" prevents selecting item
self.my_tree = ttk.Treeview(master=self.tree_frame, height=45, yscrollcommand=tree_scrollY.set, xscrollcommand=tree_scrollX.set, selectmode="none")
# Configure the scrollbar
tree_scrollY.configure(command=self.my_tree.yview)
# Define Our Columns
self.my_tree['columns'] = ("Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza")
# Format Our Columns
self.my_tree.column("#0", width=0, minwidth=0, stretch='NO')
self.my_tree.column("Name", anchor='w', width=120, minwidth=25)
self.my_tree.column("ID", anchor='center', width=120, minwidth=25)
self.my_tree.column("Favourite Pizza", anchor='w', width=120, minwidth=25)
# Create Headings
self.my_tree.heading("#0", text="", anchor='w')
self.my_tree.heading("Name", text="Name", anchor='w')
self.my_tree.heading("ID", text="ID", anchor='center')
self.my_tree.heading("Favourite Pizza", text="Favourite Pizza", anchor='w')
self.my_tree.pack()
# Alternating Line Colour
self.my_tree.tag_configure('oddrow', background="orange")
self.my_tree.tag_configure('evenrow', background="lightblue")
data = [
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
]
# Insert Data Into Treeview with For Loop
count = 0
for record in data:
if count % 2 == 0: # If we divide count by 2 and the remainder is 0 (even Row)
self.my_tree.insert(parent='', index='end', iid=count, text="", values=record, tags=('evenrow',))
else:
self.my_tree.insert(parent='', index='end', iid=count, text="", values=record, tags=('oddrow',))
# values could also = (record[0],record[1],record[2])
count += 1
def closeWindows(self):
# Close All Frames Before Opening New Frame
if self.activeWindow == 2:
self.frame2.destroy()
elif self.activeWindow == 3:
self.frame3.destroy()
elif self.activeWindow == 4:
self.frame4.destroy()
elif self.activeWindow == 5:
self.frame5.destroy()
elif self.activeWindow == 6:
self.frame6.destroy()
elif self.activeWindow == 7:
self.frame7.destroy()
def close(self):
self.master.quit()
class ThreadedClient:
def __init__(self, master):
self.master = master
self.gui = GuiPart(master)
if __name__ == '__main__':
#try:
root = customtkinter.CTk()
client = ThreadedClient(root)
root.mainloop()
1 ответ
Я решил эту проблему, я пропустил пару пунктов
self.tree_frame = customtkinter.CTkFrame(master=self.frame2)
self.tree_frame.place(x=self.frameSizeW/2, y=40, anchor='n', height=500, width=500)
tree_scrollY = tkinter.Scrollbar(self.tree_frame, orient='vertical')
tree_scrollY.pack(side='right', fill='y')
tree_scrollX = tkinter.Scrollbar(self.tree_frame, orient='horizontal')
tree_scrollX.pack(side='bottom', fill='x')
# Setup Tree View selectmode="" prevents selecting item
self.my_tree = ttk.Treeview(master=self.tree_frame, height=45, yscrollcommand=tree_scrollY.set, xscrollcommand=tree_scrollX.set, selectmode="none")
# Configure the scrollbar
tree_scrollY.configure(command=self.my_tree.yview)
tree_scrollX.configure(command=self.my_tree.xview)
изменения, которые я сделал, изменили self.tree_fame, чтобы иметь фиксированную высоту и высоту. Я думаю, что это останавливает его от непрерывного роста. Мне также пришлось добавить ориент = «вертикальный» и ориент = «горизонтальный», я также забыл строку tree_scrollX.configure
Рабочий исполняемый код находится здесь:
import customtkinter
from tkinter import ttk
# Custom Tkinter Setup
customtkinter.set_appearance_mode("Dark") # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme("dark-blue") # Themes: "blue" (standard), "green", "dark-blue"
class GuiPart(customtkinter.CTk):
def __init__(self, master):
super().__init__()
self.master = master
self.master.title("GVS AI V1_0")
# Configure Window Size
self.windowx = 1915
self.windowy = 1015
self.master.geometry(f"{self.windowx}x{self.windowy}+0+0")
self.master.resizable(width=False, height=False)
self.style = ttk.Style()
self.style.theme_use('clam')
# Configure Left Side Bar Frame
self.frame = customtkinter.CTkFrame(master=self.master, width=200, height=100, corner_radius=0)
self.frame.grid(row=0, column=0)
# Left Side Bar --> Title
title = customtkinter.CTkLabel(master=self.frame, text="GVS AI V1_1",
font=customtkinter.CTkFont(size=20, weight="bold"))
title.grid(row=0, column=0, padx=20, pady=10)
# Left Side Bar --> View
title = customtkinter.CTkLabel(master=self.frame, text="View:", font=customtkinter.CTkFont(size=14))
title.grid(row=1, column=0, padx=20, pady=5)
# Left Side Bar --> main
button1 = customtkinter.CTkButton(master=self.frame, text="Main", command=self.open_main)
button1.grid(row=2, column=0, padx=40, pady=10)
# Left Side Bar --> Setup Exit Button
console = customtkinter.CTkButton(master=self.frame, text='Exit', command=self.button_event)
console.grid(row=10, column=0, padx=40, pady=10)
# UI Button And Object Functions
self.framePosX = 220
self.framePosY = 0
self.frameSizeW = 1695 # Width & Height Of All Main Windows
self.frameSizeH = 1015
# Open Main window to start
self.activeWindow = 0
self.open_main()
self.activeWindow = 2
def button_event(self):
print("button pressed")
def open_main(self):
self.closeWindows()
self.activeWindow = 2
# Configure Main Viewing Frame
self.frame2 = customtkinter.CTkFrame(master=self.master, width=self.frameSizeW, height=self.frameSizeH, corner_radius=0, fg_color="transparent")
self.frame2.place(x=self.framePosX, y=self.framePosY)
# Main Viewing Frame --> Title
title = customtkinter.CTkLabel(master=self.frame2, text="Main Frame", font=customtkinter.CTkFont(size=20, weight="bold"))
title.place(x=self.frameSizeW/2, y=20, anchor='center')
# Need To Grab Table Name --> Column Names --> Data
# Setup Scrollable Frame Window
self.tree_frame = customtkinter.CTkFrame(master=self.frame2)
self.tree_frame.place(x=self.frameSizeW/2, y=40, anchor='n', height=500, width=500)
tree_scrollY = tkinter.Scrollbar(self.tree_frame, orient='vertical')
tree_scrollY.pack(side='right', fill='y')
tree_scrollX = tkinter.Scrollbar(self.tree_frame, orient='horizontal')
tree_scrollX.pack(side='bottom', fill='x')
# Setup Tree View selectmode="" prevents selecting item
self.my_tree = ttk.Treeview(master=self.tree_frame, height=45, yscrollcommand=tree_scrollY.set, xscrollcommand=tree_scrollX.set, selectmode="none")
# Configure the scrollbar
tree_scrollY.configure(command=self.my_tree.yview)
tree_scrollX.configure(command=self.my_tree.xview)
# Define Our Columns
self.my_tree['columns'] = ("Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza","Name", "ID", "Favourite Pizza")
# Format Our Columns
self.my_tree.column("#0", width=0, minwidth=0, stretch='NO')
self.my_tree.column("Name", anchor='w', width=120, minwidth=25)
self.my_tree.column("ID", anchor='center', width=120, minwidth=25)
self.my_tree.column("Favourite Pizza", anchor='w', width=120, minwidth=25)
# Create Headings
self.my_tree.heading("#0", text="", anchor='w')
self.my_tree.heading("Name", text="Name", anchor='w')
self.my_tree.heading("ID", text="ID", anchor='center')
self.my_tree.heading("Favourite Pizza", text="Favourite Pizza", anchor='w')
self.my_tree.pack()
# Alternating Line Colour
self.my_tree.tag_configure('oddrow', background="grey")
self.my_tree.tag_configure('evenrow', background="lightblue")
data = [
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
["hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni","hn", 1, "Pepperoni"],
]
# Insert Data Into Treeview with For Loop
count = 0
for record in data:
if count % 2 == 0: # If we divide count by 2 and the remainder is 0 (even Row)
self.my_tree.insert(parent='', index='end', iid=count, text="", values=record, tags=('evenrow',))
else:
self.my_tree.insert(parent='', index='end', iid=count, text="", values=record, tags=('oddrow',))
# values could also = (record[0],record[1],record[2])
count += 1
def closeWindows(self):
# Close All Frames Before Opening New Frame
if self.activeWindow == 2:
self.frame2.destroy()
elif self.activeWindow == 3:
self.frame3.destroy()
elif self.activeWindow == 4:
self.frame4.destroy()
elif self.activeWindow == 5:
self.frame5.destroy()
elif self.activeWindow == 6:
self.frame6.destroy()
elif self.activeWindow == 7:
self.frame7.destroy()
def close(self):
self.master.quit()
class ThreadedClient:
def __init__(self, master):
self.master = master
self.gui = GuiPart(master)
if __name__ == '__main__':
#try:
root = customtkinter.CTk()
client = ThreadedClient(root)
root.mainloop()