Как сделать так, чтобы дерево вписывалось в рамку моего ноутбука в tkinter? - PullRequest
0 голосов
/ 15 марта 2020

Я на самом деле новичок в использовании 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...