Во-первых: если вы используете Frame
для создания класса, вы должны использовать этот фрейм (self
) в качестве родителя для виджетов (вместо использования root
)
После того ...
Во-вторых: вам нужно изменить размер Frame
(self
), чтобы он использовал полное окно.
self.pack(fill='both', expand=True)
Поскольку Treeview
находится внутри Frame
, вы должны использовать columnconfigure
с Frame
.
self.columnconfigure(0, weight=1) # column with treeview
self.rowconfigure(2, weight=1) # row with treeview
Рабочий пример. Я прокомментировал command=
, чтобы запустить его.
(Кстати: я использовал bg="red"
в Frame
, чтобы увидеть, изменяется ли размер Frame
)
import tkinter as tk
from tkinter import ttk
class Main(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, self.master) # , bg="red")
self.pack(fill='both', expand=True)
self.create_widgets()
def create_widgets(self):
# button to request data
self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
self.request_button.grid(row=0, column=0, rowspan=2, columnspan=3)
# timer label
self.timer_label = tk.Label(self, text="Timer Settings")
self.timer_label.grid(row=0, column=3, columnspan=2, pady=3, sticky=tk.NSEW)
# create tk variable
self.timervar = tk.StringVar(self)
# dropdown dictionary
self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
self.timervar.set("-") # <-- set the default value
# timer dropdown menu
self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
self.timer_option.grid(row=1, column=3, columnspan=2, padx=3, pady=3, sticky=tk.NSEW)
# scroll bar for the terminal outputs
self.terminal_scrollbar = tk.Scrollbar(self)
self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)
# terminal output
self.terminal_tree = ttk.Treeview(self)
self.terminal_tree.grid(row=2, column=0, columnspan=5, sticky=tk.NSEW)
self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
self.terminal_tree["columns"] = ("1")
self.terminal_tree['show'] = 'headings'
self.terminal_tree.column("1", width=100, anchor='c')
self.terminal_tree.heading("1", text="Example")
self.columnconfigure(0, weight=1) # column with treeview
self.rowconfigure(2, weight=1) # row with treeview
root = tk.Tk()
Main(root)
root.mainloop()
Возможно, вам придется использовать рамку внутри первой строки, чтобы лучше организовать кнопку и меню параметров.
EDIT: после изменения параметров в некоторых grid()
и изменения rowconfigure()
import tkinter as tk
from tkinter import ttk
class Main(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, self.master) # , bg="red")
self.pack(fill='both', expand=True)
self.create_widgets()
def create_widgets(self):
# button to request data
self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
self.request_button.grid(row=0, column=0, rowspan=2)
# timer label
self.timer_label = tk.Label(self, text="Timer Settings")
self.timer_label.grid(row=0, column=1, pady=3, sticky=tk.NSEW)
# create tk variable
self.timervar = tk.StringVar(self)
# dropdown dictionary
self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
self.timervar.set("-") # <-- set the default value
# timer dropdown menu
self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
self.timer_option.grid(row=1, column=1, padx=3, pady=3, sticky=tk.NSEW)
# scroll bar for the terminal outputs
self.terminal_scrollbar = tk.Scrollbar(self)
self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)
# terminal output
self.terminal_tree = ttk.Treeview(self)
self.terminal_tree.grid(row=2, column=0, columnspan=3, sticky=tk.NSEW)
self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
self.terminal_tree["columns"] = ("1")
self.terminal_tree['show'] = 'headings'
self.terminal_tree.column("1", width=100, anchor='c')
self.terminal_tree.heading("1", text="Example")
self.columnconfigure(2, weight=1) # column with treeview
self.rowconfigure(2, weight=1) # row with treeview
root = tk.Tk()
Main(root)
root.mainloop()
02.01.2018