Tayaki
@Tayaki
Пытаюсь в Python

Как расположить 2 Canvas горизонтально?

Нужно расположить рядом 2 виджета Canvas, однако их нужно расположить в соотношение 3:1, и эта пропорция сохранялась с изменением размера окна. В общем, должно выглядеть так:
spoiler
5e5addc93db05223517915.png


Изначально написала такой код:
from tkinter import *
root=Tk()

root.geometry("{}x{}".format(root.winfo_screenwidth(), root.winfo_screenheight()
) )

Canvas(root, bg = "red").place(relx=0,
                                          relwidth=0.75, relheight=1)
Canvas(root, bg = "green").place(relx=75,
                                          relwidth=0.25, relheight=1)
root.mainloop()

Но корректно выводилась только красная часть. Зелёной не было вообще:
spoiler
5e5ae79bb6a2c296617503.png


Погуглила, нашла решение, но для кнопок: clck.ru/MKdKS
Сделала по аналогии, оба примера, но в каждом получилось совершенно не то.

1. Через pack() и frame()

from tkinter import *
root=Tk()

root.geometry("{}x{}".format(root.winfo_screenwidth(), root.winfo_screenheight()
) )

top=Frame(root)
top.pack(side=TOP)

Canvas1=Canvas(root, bg="red")
Canvas1.place(relx=0,
              relwidth=0.75, relheight=1,
              in_=top)
Canvas2=Canvas(root, bg = "green")
Canvas2.place(relx=75,
               relwidth=0.25, relheight=1,
               in_=top)

root.mainloop()


По результату то же самое:
spoiler
5e5ae75e4d09d161371862.png

Скорее всего ошибка в том, что использую одновременно и pack(), и place(). Однако place() нужен для пропорции, от него отказаться не могу. (Или могу, но просто не знаю этого. :D )

2. Через grid()
from tkinter import *
root=Tk()

root.geometry("{}x{}".format(root.winfo_screenwidth(), root.winfo_screenheight()
) )

canvas1=Canvas(root, bg = "red")
canvas2=Canvas(root, bg = "green")

canvas1.grid(in_=root, row=0, column=0, columnspan=3, sticky="s")
canvas2.grid(in_=root, row=0, column=3, sticky="s")

root.mainloop()

Что получилось:
spoiler
5e5ae88932626900890056.png

Но в этом случае всё вообще не так: мало того, что соотношения нет, так ещё к тому же и области не "растянулись" вниз.

Что делать и как исправить, желательно, изначальный вариант?

(Потом мне нужно будет выбирать и загружать видео в красную область, поэтому какую библиотеку лучше изучить для этой цели? OpenCV для работы с самим видео — само собой разумеется, а вот для GUI? =) На первый курсах учила Qt, но мало что получалось сделать, чтобы оно работало вменяемо и без костылей. Если всё одно лучше его использовать, то что почитать/посмотреть, чтобы наконец разобраться? )
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
Tayaki
@Tayaki Автор вопроса
Пытаюсь в Python
dimir Kozhevin @vovik0
В первом скрипте:
Canvas(root, bg = "green").place(relx=0.75, .... )
значения relx, relwidth,relheight должны быть от 0 до 1 (0;0 верхний левый угол, 1;1 нижний правый)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы