Я на самом деле новичок в использовании python. Я просто хотел спросить, как я смогу сделать так, чтобы мое дерево вписывалось / расширялось автоматически на рамке внутри виджета ноутбука, не прибегая к фиксированной ширине и высоте для контейнера дерева (рамки)? Я не уверен, что я здесь не так делаю. Вот мой прогресс до сих пор. Также приветствуются советы о том, как я могу улучшить свое кодирование.
Хотя я могу расширить свое древовидное представление до его фрейма, раскомментировав строку
self.tabcpfailures.grid_propagate (0) и дав фиксированная ширина и высота рамки, которую я избегаю.
mainwindow.py
import tkinter as tk
import tk_tooltip as ttp
import menu
from tkinter import ttk
from tkinter import messagebox
class MainWindow:
def __init__(self, master):
self.master = master
self._menu_frame = None
# Main GUI elements declaration
self.frmnav = tk.Frame(self.master, bg="#182C61")
self.menu_frame = tk.Frame(self.master, bg="green")
self.btndaily = self.mn_create_navbutton(
"D", "Daily Monitoring", menu.DailyMonitoring)
# Main GUI elements styling
self.master.title("DETE Tool")
self.master.config(bg="white")
self.master.geometry("{}x{}".format(self.master.winfo_screenwidth(),
self.master.winfo_screenheight()))
self.master.columnconfigure(1, weight=1)
self.master.rowconfigure(0, weight=1)
self.frmnav.grid(row=0, column=0, sticky="nsew")
self.menu_frame.columnconfigure(0, weight=1)
self.menu_frame.rowconfigure(0, weight=1)
self.menu_frame.grid(row=0, column=1, sticky="nsew")
self.btndaily.grid(row=0, column=0,
pady=(10, 0), padx=(5, 5))
self.menu_frame.grid_propagate(0)
self.btndaily.grid_propagate(0)
def mn_create_navbutton(self, text, tooltip, menu_class):
button_placeholder = tk.Frame(self.frmnav, width=50, height=50)
button_placeholder.columnconfigure(0, weight=1)
button_placeholder.rowconfigure(0, weight=1)
nav_button = tk.Button(button_placeholder, text=text, bg="#e67e22", fg="white", font=("Roboto", 10, "bold"), relief="flat",
command=lambda: self.mn_switch_frame(menu_class))
nav_button_tooltip = ttp.CreateToolTip(nav_button, tooltip)
nav_button.grid(row=0, column=0, sticky="nesw")
return button_placeholder
def mn_center_window(self, screenwidth, screenheight):
# Gets the requested values of the height and widht.
self.screenwidth = screenwidth
self.screenheight = screenheight
windowWidth = self.master.winfo_reqwidth()
windowHeight = self.master.winfo_reqheight()
# Gets both half the screen width/height and window width/height
positionRight = int(
self.master.winfo_screenwidth() / 2 - windowWidth / 2)
positionDown = int(
self.master.winfo_screenheight() / 2 - windowHeight / 2)
# Positions the window in the center of the page.
return self.master.geometry("{}x{}+{}+{}".format(self.screenwidth, self.screenheight, positionRight, positionDown))
def mn_switch_frame(self, menu_class):
menu_new_frame = menu_class(self.menu_frame)
if self._menu_frame is not None:
self._menu_frame.destroy()
self._menu_frame = menu_new_frame
menu.py
import tkinter as tk
import tk_tooltip as ttp
import db
from tkinter import ttk
from tkinter import messagebox
class DailyMonitoring(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.master = master
# DailyMonitoring GUI elements declaration
self.tabparent = ttk.Notebook(self)
self.tabcpfailures = tk.Frame(self.tabparent)
self.tabparent.add(self.tabcpfailures, text="CP Failures")
self.treecpfailures = CreateTreeView(
self.tabcpfailures, *("id", "duedate", "workflowtype", "transactionid", "batchid", "jobid"))
self.taberroredtasks = tk.Frame(self.tabparent)
self.tabparent.add(self.taberroredtasks, text="Errored Tasks")
# DailyMonitoring GUI elements styling
self.grid(row=0, column=0, sticky="nsew")
self.grid_propagate(0)
self.tabparent.grid(row=0, column=0, sticky="nsew")
self.tabcpfailures.grid_rowconfigure(0, weight=1)
self.tabcpfailures.grid_columnconfigure(0, weight=1)
#self.tabcpfailures.grid(row=0, column=0, sticky="nsew")
#self.tabcpfailures.grid_propagate(0)
class CreateTreeView:
def __init__(self, master, *args):
self.master = master
self.treemenu = ttk.Treeview(self.master)
self.treemenu["show"] = "headings"
self.treemenu["columns"] = args
for arg in args:
self.treemenu.heading(arg, text="{}".format(arg))
self.treemenu.grid(row=0, column=0, sticky="nsew")
Как я хочу, чтобы это выглядело как (это с использованием фиксированной ширины и высоты и раскомментирования self.tabcpfailures.grid_propagate (0) ):
Как я хочу, чтобы это выглядело
Как это выглядит, когда я хочу автоматически развернуть фрейм внутри ноутбука, чтобы дерево также расширялось на весь фрейм, используя self.tabcpfailures.grid (row = 0, column = 0, sticky = "nsew")
Как это выглядит при использовании sticky = nsew