tkinker grid columconfigure и строка configure не работают - PullRequest
0 голосов
/ 04 ноября 2018

Привет, мне нужна помощь с настройкой строки и настройкой colum. Программа построена из tk, от которого наследуется фрейм, затем записная книжка (вкладки), которая наследуется от фрейма, затем наследуется сетка от блокнота. До ноутбука все расширяется так, как я хотел.

Моя проблема в том, что система сетки не расширяется. Я положил строку и столбец настроить с весом внутри, и он не работает. 1). Я не знаю, правильно ли я на это ссылаюсь

self.tabControl.columnconfigure(employee, weight = 1)

2). Так как у меня есть pack () для первых 2 уровней, нужно ли мне выполнять настройку столбца и строки в root? если мне нужно где и как бы это поставить?

вот программа:

import tkinter as tk
from tkinter import ttk

#upper tabs
upper_tabs = ["Final", "Requests"]
tabs = {}

Employees = ["A", "B", "C", "D", "E", "F", "G", ]
Days= ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",   
"Saturday", "Sunday"]

class Application(ttk.Frame): #inherent from frame.

    def __init__(self, parent):
        tk.Frame.__init__(self, parent, bg="ivory2", bd=2,       
          relief=tk.RAISED )
        self.parent = parent
        self.pack(fill=tk.BOTH, expand=1)

        self.GUI()

    def GUI(self): #the function that runs all the GUI functions.

        self.create_tabs()
        self.buttons()

        for name in upper_tabs:
            self.create_grid(name)

####---------create grid_GUI---------------------####

    def create_tabs(self):
        self.tabControl = ttk.Notebook(self, width="1100", height= 
        "500") #Create Tab Control

        for name in upper_tabs:
            self.tab=ttk.Frame(self.tabControl)# Create a tab
            self.tabControl.add(self.tab, text=name)      # Add the tab
            tabs[name] = self.tab
            self.tabControl.pack(expand=1, fill=tk.BOTH)  # Pack to      
            make visible

    def create_grid(self, name):

        for employee in range(len(Employees)+2):
            self.tabControl.columnconfigure(employee, weight = 1)
            for day in range(len(Days)+2):
                self.tabControl.rowconfigure( day, weight = 1)
                self.label = tk.Label(tabs[name], relief="ridge",    
                width=12, height=3)
                self.label.grid(row=employee, column=day, )



    def buttons(self):

        self.button=tk.Button(self, text="Caluculate", bg="salmon", )
        self.button.pack(side= "right")

def main():

    root = tk.Tk()
    root.title("class basic window")
    root.geometry("1200x600")
    root.config(background="LightBlue4")
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 ноября 2018

Вы устанавливаете явный размер для меток и чтобы они меняли размер с помощью вкладки, которую вы должны указать sticky='nsew'.

Затем вы настраиваете строки и столбцы tabControl, когда вам нужно сделать это для каждой из вкладок.

Я внес соответствующие изменения и добавил отступы в блокнот и кнопку, чтобы сделать макет немного более разреженным. Блокнот теперь будет расширяться вместе с окном. Я установил минимальную высоту в строке конфигурации фрейма приложения, чтобы кнопка не исчезала при уменьшении окна.

Я изменил всю геометрию на grid(), потому что это проще, когда макет становится более сложным.

Я прокомментировал значительные изменения в коде ниже:

import tkinter as tk
from tkinter import ttk

#upper tabs
upper_tabs = ["Final", "Requests"]
tabs = {}

Employees = ["A", "B", "C", "D", "E", "F", "G", ]
Days= ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
       "Saturday", "Sunday"]

class Application(tk.Frame): #inherent from frame.
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, bg="tan")
        self.parent = parent
        self.pack(fill=tk.BOTH, expand=1)
        # Configure self to fill parent when size changes
        self.rowconfigure([0,1],weight=1, minsize=40)
            # Minsize will keep row=1 at least 50 pixels high or the
            # button will disappear when the frame shrinks
        self.columnconfigure([0,1],weight=1)
        self.GUI()

    def GUI(self): #the function that runs all the GUI functions.
        self.create_tabs()
        self.buttons()
        for name in upper_tabs:
            self.create_grid(name)

####---------create grid_GUI---------------------####

    def create_tabs(self):
        self.tabControl = ttk.Notebook(self, width=1100, height=500)
        for name in upper_tabs:
            self.tab=tk.Frame(self.tabControl, bg='thistle')
            self.tabControl.add(self.tab, text=name)
            tabs[name] = self.tab
            # Set sticky to fill up available space and padding for layout
            self.tabControl.grid(row=0, column=0, padx=10, pady=10, sticky='nsew')  

    def create_grid(self, name):
        for employee in range(len(Employees)+2):
            # columnconfigure tab instead of tabControl
            tabs[name].columnconfigure(employee, weight = 1)
            for day in range(len(Days)+2):
                # rowconfigure tab instead of tabControl
                tabs[name].rowconfigure(day, weight=1)
                self.label = tk.Label(tabs[name], relief="ridge", width=12, height=3)
                # Set sticky to fill available space
                self.label.grid(row=employee, column=day, sticky='nsew')

    def buttons(self):
        self.button=tk.Button(self, text="Caluculate", bg="salmon", )
        # Adding padding for layout
        self.button.grid(row=1, column=0, padx=(0,10), pady=(0,10), sticky='e')

def main():
    root = tk.Tk()
    root.title("class basic window")
    root.config(background="LightBlue4")
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Это то, к чему вы стремитесь?

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