Python 如何在tkinter上进行响应性canva?

Python 如何在tkinter上进行响应性canva?,python,tkinter,responsive-design,tkinter-canvas,dimension,Python,Tkinter,Responsive Design,Tkinter Canvas,Dimension,(第一次编辑是在更改标题之前进行的,请阅读至结尾!) 在Windows 10上调整Tkinter屏幕时出现问题 我在做这样的事情: width_screen = root.winfo_screenwidth() height_screen = root.winfo_screenheight() root.geometry(f'{width_screen}x{height_screen}') 但问题是这个配置隐藏了我的任务栏。。。我搜索一种方法来设置屏幕,就像我的浏览器一样,例如,有一个最大化

(第一次编辑是在更改标题之前进行的,请阅读至结尾!)

在Windows 10上调整Tkinter屏幕时出现问题

我在做这样的事情:

width_screen  = root.winfo_screenwidth()
height_screen = root.winfo_screenheight()
root.geometry(f'{width_screen}x{height_screen}')
但问题是这个配置隐藏了我的任务栏。。。我搜索一种方法来设置屏幕,就像我的浏览器一样,例如,有一个最大化的窗口和一个任务栏

非常感谢你的帮助

编辑1:它无法使用此代码

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

# -------------------------------- Importation ------------------------------- #

import os
import subprocess

import tkinter as tk

# ------------------------------ Initialisation ------------------------------ #

root = tk.Tk() #initialise l'application
root.title("Bruits ambiants pour l'écoute du patient")

width_screen  = root.winfo_screenwidth()
height_screen = root.winfo_screenheight()
root.state('zoomed')

wav_files = ["a.wav","b.wav","c.wav","d.wav","e.wav","f.wav","g.wav","h.wav","i.wav","j.wav","k.wav","l.wav","m.wav","n.wav","o.wav","p.wav","q.wav","r.wav","s.wav","t.wav","u.wav","v.wav","w.wav","x.wav","y.wav","z.wav","aa.wav","bb.wav","cc.wav","dd.wav","ee.wav","ff.wav","gg.wav","hh.wav","ii.wav","jj.wav"]


# ---------------------------------------------------------------------------- #
#                            Vertical scrolled frame                           #
# ---------------------------------------------------------------------------- #

class VerticalScrolledFrame(tk.Frame):

    def __init__(self, parent, *args, **kw):
        tk.Frame.__init__(self, parent, *args, **kw)            

        # Create a frame for the canvas with non-zero row&column weights
        self.frame_canvas = tk.Frame(self,bg="gray50")
        self.frame_canvas.grid(row=2, column=0, sticky='nw')
        self.frame_canvas.grid_rowconfigure(0, weight=1)
        self.frame_canvas.grid_columnconfigure(0, weight=1)
        self.parent=parent

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = tk.Scrollbar(self.frame_canvas, orient=tk.VERTICAL)
        vscrollbar.grid(row=0, column=1, sticky='ns')
        self.canvas = tk.Canvas(self.frame_canvas, bd=0, highlightthickness=0,
                        yscrollcommand=vscrollbar.set, width=self.parent.winfo_screenwidth(), 
                        height=self.parent.winfo_screenheight()-100)
        self.canvas.grid(row=0, column=0, sticky="news")
        vscrollbar.config(command=self.canvas.yview)
        
        self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = tk.Frame(self.canvas,bg="gray50")
        interior_id = self.canvas.create_window(0, 0, window=interior,
                                           anchor=tk.NW)
        self.interior.update_idletasks()

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            self.canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                self.canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)
        
        self.canvas.config(scrollregion=self.canvas.bbox("all"))

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                self.canvas.itemconfigure(interior_id, width=self.canvas.winfo_width())
        self.canvas.bind('<Configure>', _configure_canvas)

    def _on_mousewheel(self, event):
        if len(wav_files) > 25:
            self.canvas.yview_scroll(int(-1*(event.delta/120)), "units")
        

# ---------------------------------------------------------------------------- #
#                                 Sound Buttons                                #
# ---------------------------------------------------------------------------- #

class Make_sound:
    def __init__(self, name, parent, i):

        self.varbutton = tk.StringVar()

        self.name = name
        self.parent = parent


        self.num = i
        self.soundbuttoncreator()

    def soundbuttoncreator(self):

        self.rows = self.num//4
        self.columns = self.num%4

        self.frame = tk.Frame(self.parent,bg="gray50", bd=3, relief="flat") # create a frame to hold the widgets
        
        # use self.frame as parent instead of self.parent

        self.button = tk.Checkbutton(self.frame, text=self.name.capitalize(), indicatoron=False, selectcolor="DeepSkyBlue3", background="slate gray", activebackground="LightSteelBlue3",variable=self.varbutton, command=self.launchsound, height=6, width=20) 
        self.button.pack()

        self.button.bind("<Enter>", self.on_enter)
        self.button.bind("<Leave>", self.on_leave)

        self.frame.grid(row=self.rows, column=self.columns)

    def on_enter(self, e):
        self.button['background'] = 'LightSteelBlue3'

    def on_leave(self, e):
        self.button['background'] = 'slate gray'

    def launchsound(self):   
        pass


def sounds_buttons(parent):
    for i in range(len(wav_files)):
        new_name = wav_files[i][:-4]
        globals()["wav_files"][i] = Make_sound(new_name,parent,i)
            

def end_all():
    for i in range(len(wav_files)):
        globals()["wav_files"][i].varbutton.set("0")
        try:
            globals()["wav_files"][i].chan.stop()
        except AttributeError:
            pass

# ---------------------------------------------------------------------------- #
#                                   Creation                                   #
# ---------------------------------------------------------------------------- #

# ---------------------------------- Button ---------------------------------- #

frame_test = tk.Frame(root)
frame_test.grid(row=10,column=0, columnspan=5, sticky="s",padx=5,pady=10)
Button_open = tk.Button(frame_test, text="Open", background="slate gray", activebackground="LightSteelBlue3")
Button_open.pack(fill="x")
Button_end = tk.Button(frame_test, text="End", background="slate gray", activebackground="LightSteelBlue3")
Button_end.pack(fill="x")


# ---------------------------------------------------------------------------- #
#                                 LEFT BUTTONS                                 #
# ---------------------------------------------------------------------------- #

frame_buttons = tk.Frame(root,bd=5,bg="gray50")
frame_buttons.grid(row=1,column=0,rowspan=8,padx=5,pady=10,sticky="nw")

scframe = VerticalScrolledFrame(frame_buttons)
scframe.grid(row=1,column=0,rowspan=20,columnspan=3)

sounds_buttons(scframe.interior)

# ----------------------------------- test ----------------------------------- #

panel = tk.Button(root, text="test", background="slate gray", activebackground="LightSteelBlue3")
panel.grid(row=0,column=0,sticky="nw")

# ---------------------------------------------------------------------------- #
#                                     ROOT                                     #
# ---------------------------------------------------------------------------- #

root.mainloop()
事实上,
height=self.parent.winfo_screenheight()-100
部分工作不正常。如果我将
height=self.parent.winfo_screenheight()-1000
,以下是我的输出:

这是有希望的,因为我现在看到了框架。现在,我明白了,我只是希望画布能够响应,而不是设置高度和宽度,尽管我可以在许多计算机上使用它

你能给我解释一下实现这个目标的方法吗?例如,始终有4列按钮,但其尺寸可能会发生变化,并将按钮列表设置为始终占据屏幕的其余部分(我们可以说它可能占据屏幕宽度的一半,并且上下按钮必须随着按钮列表的增长而增长。)。

尝试下面的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

# -------------------------------- Importation ------------------------------- #

import os
import subprocess

import tkinter as tk

# ------------------------------ Initialisation ------------------------------ #

root = tk.Tk()  # initialise l'application
root.title("Bruits ambiants pour l'écoute du patient")

width_screen = root.winfo_screenwidth()
height_screen = root.winfo_screenheight()
root.state('zoomed')

wav_files = ["a.wav", "b.wav", "c.wav", "d.wav", "e.wav", "f.wav", "g.wav", "h.wav", "i.wav", "j.wav", "k.wav", "l.wav",
             "m.wav", "n.wav", "o.wav", "p.wav", "q.wav", "r.wav", "s.wav", "t.wav", "u.wav", "v.wav", "w.wav", "x.wav",
             "y.wav", "z.wav", "aa.wav", "bb.wav", "cc.wav", "dd.wav", "ee.wav", "ff.wav", "gg.wav", "hh.wav", "ii.wav",
             "jj.wav"]


# ---------------------------------------------------------------------------- #
#                            Vertical scrolled frame                           #
# ---------------------------------------------------------------------------- #

class VerticalScrolledFrame(tk.Frame):

    def __init__(self, parent, *args, **kw):
        tk.Frame.__init__(self, parent, *args, **kw)

        # Create a frame for the canvas with non-zero row&column weights
        self.parent = parent

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
        vscrollbar.pack(fill="y", side="right",expand=True)
        self.canvas = tk.Canvas(self, bd=0, highlightthickness=1,
                                yscrollcommand=vscrollbar.set)
        self.canvas.pack(fill="both", expand=True)
        vscrollbar.config(command=self.canvas.yview)

        self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = tk.Frame(self.canvas, bg="gray50")
        interior_id = self.canvas.create_window(0, 0, window=interior,
                                                anchor=tk.NW)
        self.interior.update_idletasks()

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            self.canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                self.canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)

        self.canvas.config(scrollregion=self.canvas.bbox("all"))

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                self.canvas.itemconfigure(interior_id, width=self.canvas.winfo_width())

        self.canvas.bind('<Configure>', _configure_canvas)

    def _on_mousewheel(self, event):
        if len(wav_files) > 25:
            self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")


# ---------------------------------------------------------------------------- #
#                                 Sound Buttons                                #
# ---------------------------------------------------------------------------- #

class Make_sound:
    def __init__(self, name, parent, i):
        self.varbutton = tk.StringVar()

        self.name = name
        self.parent = parent

        self.num = i
        self.soundbuttoncreator()

    def soundbuttoncreator(self):
        self.rows = self.num // 4
        self.columns = self.num % 4

        self.frame = tk.Frame(self.parent, bg="gray50", bd=3, relief="flat")  # create a frame to hold the widgets

        # use self.frame as parent instead of self.parent

        self.button = tk.Checkbutton(self.frame, text=self.name.capitalize(), indicatoron=False,
                                     selectcolor="DeepSkyBlue3", background="slate gray",
                                     activebackground="LightSteelBlue3", variable=self.varbutton,
                                     command=self.launchsound, height=6, width=20)
        self.button.pack()

        self.button.bind("<Enter>", self.on_enter)
        self.button.bind("<Leave>", self.on_leave)

        self.frame.grid(row=self.rows, column=self.columns)

    def on_enter(self, e):
        self.button['background'] = 'LightSteelBlue3'

    def on_leave(self, e):
        self.button['background'] = 'slate gray'

    def launchsound(self):
        pass


def sounds_buttons(parent):
    for i in range(len(wav_files)):
        new_name = wav_files[i][:-4]
        globals()["wav_files"][i] = Make_sound(new_name, parent, i)


def end_all():
    for i in range(len(wav_files)):
        globals()["wav_files"][i].varbutton.set("0")
        try:
            globals()["wav_files"][i].chan.stop()
        except AttributeError:
            pass


# ---------------------------------------------------------------------------- #
#                                   Creation                                   #
# ---------------------------------------------------------------------------- #

# ---------------------------------- Button ---------------------------------- #

frame_test = tk.Frame(root)
frame_test.grid(row=10, column=0, columnspan=5, sticky="ns")
Button_open = tk.Button(frame_test, text="Open", background="slate gray", activebackground="LightSteelBlue3")
Button_open.grid(row=0, column=0, sticky="ns")
Button_end = tk.Button(frame_test, text="End", background="slate gray", activebackground="LightSteelBlue3")
Button_end.grid(row=1, column=0, sticky="ns")

# ---------------------------------------------------------------------------- #
#                                 LEFT BUTTONS                                 #
# ---------------------------------------------------------------------------- #

frame_buttons = tk.Frame(root, bd=5, bg="gray50")
frame_buttons.grid(row=1, column=0, rowspan=8, padx=5, pady=10, sticky="nwes")

scframe = VerticalScrolledFrame(frame_buttons)
scframe.pack(fill="both", expand=True)

sounds_buttons(scframe.interior)

# ----------------------------------- test ----------------------------------- #

panel = tk.Button(root, text="test", background="slate gray", activebackground="LightSteelBlue3")
panel.grid(row=0, column=0, sticky="nw")

# ---------------------------------------------------------------------------- #
#                                     ROOT                                     #
# ---------------------------------------------------------------------------- #

for i in range(1, 11):
    root.grid_rowconfigure(i, weight=1)

for i in range(frame_test.grid_size()[1]+1):
    frame_test.grid_rowconfigure(i, weight=1)

root.mainloop()
#/usr/bin/env蟒蛇3
#-*-编码:utf-8-*-
#-------------------------------------进口------------------#
导入操作系统
导入子流程
将tkinter作为tk导入
#------------------------------------初始化------------------#
root=tk.tk()#初始化l'应用程序
根标题(“病人的痛苦之旅”)
width\u screen=root.winfo\u screenwidth()
高度\屏幕=root.winfo\屏幕高度()
root.state('缩放')
wav_files=[“a.wav”、“b.wav”、“c.wav”、“d.wav”、“e.wav”、“f.wav”、“g.wav”、“h.wav”、“i.wav”、“j.wav”、“k.wav”、“l.wav”,
“m.wav”,“n.wav”,“o.wav”,“p.wav”,“q.wav”,“r.wav”,“s.wav”,“t.wav”,“u.wav”,“v.wav”,“w.wav”,“x.wav”,
“y.wav”,“z.wav”,“aa.wav”,“bb.wav”,“cc.wav”,“dd.wav”,“ee.wav”,“ff.wav”,“gg.wav”,“hh.wav”,“ii.wav”,
“jj.wav”]
# ---------------------------------------------------------------------------- #
#垂直滚动框#
# ---------------------------------------------------------------------------- #
类垂直滚动框架(tk.Frame):
定义初始值(自、父、*args、**kw):
tk.Frame.\uuuuuu init\uuuuuuuuuuuuuuuuuuuu(自、父、*args、**kw)
#为画布创建具有非零行和列权重的框架
self.parent=parent
#创建画布对象和用于滚动的垂直滚动条
vscrollbar=tk.Scrollbar(self,orient=tk.VERTICAL)
vscrollbar.pack(fill=“y”,side=“right”,expand=True)
self.canvas=tk.canvas(self,bd=0,highlightthickness=1,
yscrollcommand=vscrollbar.set)
self.canvas.pack(fill=“both”,expand=True)
vscrollbar.config(命令=self.canvas.yview)
self.canvas.bind_all(“,self._在鼠标滚轮上)
#在画布内创建一个框架,该框架将与其一起滚动
self.interior=interior=tk.Frame(self.canvas,bg=“gray50”)
interior\u id=self.canvas.create\u window(0,0,window=interior,
锚点=塔克西北)
self.interior.update_idletasks()
#跟踪画布和帧宽度的更改并同步它们,
#同时更新滚动条
def_配置_内部(事件):
#更新滚动条以匹配内部框架的大小
大小=(interior.winfo_reqwidth(),interior.winfo_reqheight())
self.canvas.config(scrollregion=“0%s%s”%size)
if interior.winfo_reqwidth()!=self.canvas.winfo_width():
#更新画布的宽度以适合内部框架
self.canvas.config(width=interior.winfo_reqwidth())
内部绑定(“”,\u配置\u内部)
self.canvas.config(scrollregion=self.canvas.bbox(“全部”))
定义配置画布(事件):
if interior.winfo_reqwidth()!=self.canvas.winfo_width():
#更新内部框架的宽度以填充画布
self.canvas.itemconfigure(interior\u id,width=self.canvas.winfo\u width())
self.canvas.bind(“”,\u configure\u canvas)
鼠标滚轮上的def(自身、事件):
如果len(wav_文件)>25:
self.canvas.yview_滚动条(int(-1*(event.delta/120)),“单位”)
# ---------------------------------------------------------------------------- #
#声音按钮#
# ---------------------------------------------------------------------------- #
课堂录音:
定义初始化(自我、姓名、父项、i):
self.varbutton=tk.StringVar()
self.name=名称
self.parent=parent
self.num=i
self.soundbuttoncreator()
def soundbuttoncreator(自身):
self.rows=self.num//4
self.columns=self.num%4
self.frame=tk.frame(self.parent,bg=“gray50”,bd=3,relief=“flat”)#创建一个框架来容纳小部件
#使用self.frame作为父对象,而不是self.parent
self.button=tk.Checkbutton(self.frame,text=self.name.capitalize(),indicatoron=False,
选择color=“DeepSkyBlue3”,background=“slate gray”,
activebackground=“LightSteelBlue3”,变量=self.varbutton,
命令=self.launchsound,高度=6,宽度=20)
self.button.pack()
self.button.bind(“,self.on\u enter)
self.button.bind(“,self.on_离开)
self.frame.grid(行=self.rows,列=self.columns)
def on_进入(自我,e):
self.button['background']=“LightSteelBlue3”
休假时的def(自我,e):
self.button['background']='slate gray'
D
#!/usr/bin/env python3
# -*- coding:utf-8 -*-

# -------------------------------- Importation ------------------------------- #

import os
import subprocess

import tkinter as tk

# ------------------------------ Initialisation ------------------------------ #

root = tk.Tk()  # initialise l'application
root.title("Bruits ambiants pour l'écoute du patient")

width_screen = root.winfo_screenwidth()
height_screen = root.winfo_screenheight()
root.state('zoomed')

wav_files = ["a.wav", "b.wav", "c.wav", "d.wav", "e.wav", "f.wav", "g.wav", "h.wav", "i.wav", "j.wav", "k.wav", "l.wav",
             "m.wav", "n.wav", "o.wav", "p.wav", "q.wav", "r.wav", "s.wav", "t.wav", "u.wav", "v.wav", "w.wav", "x.wav",
             "y.wav", "z.wav", "aa.wav", "bb.wav", "cc.wav", "dd.wav", "ee.wav", "ff.wav", "gg.wav", "hh.wav", "ii.wav",
             "jj.wav"]


# ---------------------------------------------------------------------------- #
#                            Vertical scrolled frame                           #
# ---------------------------------------------------------------------------- #

class VerticalScrolledFrame(tk.Frame):

    def __init__(self, parent, *args, **kw):
        tk.Frame.__init__(self, parent, *args, **kw)

        # Create a frame for the canvas with non-zero row&column weights
        self.parent = parent

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
        vscrollbar.pack(fill="y", side="right",expand=True)
        self.canvas = tk.Canvas(self, bd=0, highlightthickness=1,
                                yscrollcommand=vscrollbar.set)
        self.canvas.pack(fill="both", expand=True)
        vscrollbar.config(command=self.canvas.yview)

        self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = tk.Frame(self.canvas, bg="gray50")
        interior_id = self.canvas.create_window(0, 0, window=interior,
                                                anchor=tk.NW)
        self.interior.update_idletasks()

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            self.canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                self.canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)

        self.canvas.config(scrollregion=self.canvas.bbox("all"))

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != self.canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                self.canvas.itemconfigure(interior_id, width=self.canvas.winfo_width())

        self.canvas.bind('<Configure>', _configure_canvas)

    def _on_mousewheel(self, event):
        if len(wav_files) > 25:
            self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")


# ---------------------------------------------------------------------------- #
#                                 Sound Buttons                                #
# ---------------------------------------------------------------------------- #

class Make_sound:
    def __init__(self, name, parent, i):
        self.varbutton = tk.StringVar()

        self.name = name
        self.parent = parent

        self.num = i
        self.soundbuttoncreator()

    def soundbuttoncreator(self):
        self.rows = self.num // 4
        self.columns = self.num % 4

        self.frame = tk.Frame(self.parent, bg="gray50", bd=3, relief="flat")  # create a frame to hold the widgets

        # use self.frame as parent instead of self.parent

        self.button = tk.Checkbutton(self.frame, text=self.name.capitalize(), indicatoron=False,
                                     selectcolor="DeepSkyBlue3", background="slate gray",
                                     activebackground="LightSteelBlue3", variable=self.varbutton,
                                     command=self.launchsound, height=6, width=20)
        self.button.pack()

        self.button.bind("<Enter>", self.on_enter)
        self.button.bind("<Leave>", self.on_leave)

        self.frame.grid(row=self.rows, column=self.columns)

    def on_enter(self, e):
        self.button['background'] = 'LightSteelBlue3'

    def on_leave(self, e):
        self.button['background'] = 'slate gray'

    def launchsound(self):
        pass


def sounds_buttons(parent):
    for i in range(len(wav_files)):
        new_name = wav_files[i][:-4]
        globals()["wav_files"][i] = Make_sound(new_name, parent, i)


def end_all():
    for i in range(len(wav_files)):
        globals()["wav_files"][i].varbutton.set("0")
        try:
            globals()["wav_files"][i].chan.stop()
        except AttributeError:
            pass


# ---------------------------------------------------------------------------- #
#                                   Creation                                   #
# ---------------------------------------------------------------------------- #

# ---------------------------------- Button ---------------------------------- #

frame_test = tk.Frame(root)
frame_test.grid(row=10, column=0, columnspan=5, sticky="ns")
Button_open = tk.Button(frame_test, text="Open", background="slate gray", activebackground="LightSteelBlue3")
Button_open.grid(row=0, column=0, sticky="ns")
Button_end = tk.Button(frame_test, text="End", background="slate gray", activebackground="LightSteelBlue3")
Button_end.grid(row=1, column=0, sticky="ns")

# ---------------------------------------------------------------------------- #
#                                 LEFT BUTTONS                                 #
# ---------------------------------------------------------------------------- #

frame_buttons = tk.Frame(root, bd=5, bg="gray50")
frame_buttons.grid(row=1, column=0, rowspan=8, padx=5, pady=10, sticky="nwes")

scframe = VerticalScrolledFrame(frame_buttons)
scframe.pack(fill="both", expand=True)

sounds_buttons(scframe.interior)

# ----------------------------------- test ----------------------------------- #

panel = tk.Button(root, text="test", background="slate gray", activebackground="LightSteelBlue3")
panel.grid(row=0, column=0, sticky="nw")

# ---------------------------------------------------------------------------- #
#                                     ROOT                                     #
# ---------------------------------------------------------------------------- #

for i in range(1, 11):
    root.grid_rowconfigure(i, weight=1)

for i in range(frame_test.grid_size()[1]+1):
    frame_test.grid_rowconfigure(i, weight=1)

root.mainloop()