Форум сайта python.su
4
Добрый вечер.
Есть такой код:
#!/usr/bin/python3 # -*- coding: UTF-8 -*- import tkinter as tk x = 1024 y = 768 root = tk.Tk() root.geometry('{}x{}'.format(x,y)) frm_prm = tk.Frame(root) frm_prm.pack(expand=1,fill='both') frm_ver = tk.Frame(frm_prm) frm_ver.pack (expand = 0 ,fill = 'y' ,side = 'right' ) cvs_prm = tk.Canvas(frm_prm) cvs_prm.pack(expand=1,fill='both') frm_emb = tk.Frame(frm_prm) frm_emb.pack(expand=1,fill='both') cvs_prm.create_window(0,0,window=frm_emb) txt_prm = tk.Text(frm_emb) txt_prm.pack(expand=1,fill='both') txt_prm.insert('1.0','hello') scrollbar = tk.Scrollbar (master = frm_ver ,orient = 'vertical' ) scrollbar.pack (expand = 1 ,fill = 'y' ,side = 'right' ) cvs_prm.configure (scrollregion = (-x/2,-y/2,x/2,y/2) ) cvs_prm.xview_moveto(0) cvs_prm.yview_moveto(0) txt_prm.config(yscrollcommand=scrollbar.set) scrollbar.config(command=cvs_prm.yview) root.mainloop()
Офлайн
72
vanvanovТак, он и заполняет полностью, как вы хотите. Назначьте канвасу цвет чтобы это увидеть:
Мне нужно, чтобы tk.Canvas заполнял все доступное пространство (в данном случае - 1024x768 за вычетом tk.Scrollbar), однако, данный виджет рисуется по центру с меньшим размером. Как это исправить?
cvs_prm = tk.Canvas(frm_prm, bg='red')
Офлайн
4
ramiOK, а почему Tk.Text не занимает все доступное пространство, если везде (в том числе, в родительских виджетах) указано expand=1?
Так, он и заполняет полностью, как вы хотите
Офлайн
72
Родитель у Tk.Text безразмерный фрейм frm_emb вставленный в безразмерное окно канваса, явных размеров нет ни у кого из троих (Tk.Text, фрейм и окно канваса), но у Tk.Text есть размер по умолчанию — его вы и видите. Задавайте размеры Tk.Text или окну в канвасе.
expand=1 означает заполнение всего назначенного пространства, но так как нет явных размеров, заполняются размеры по умолчанию.
Офлайн
4
rami
Спасибо! Решил проблему так:
frm_emb = tk.Frame (master = frm_prm ,width = x - 30 ,height = y ) frm_emb.pack_propagate(False) frm_emb.pack (expand = 1 ,fill = 'both' )
Отредактировано vanvanov (Март 20, 2019 11:04:20)
Офлайн
72
А зачем вставлять Text в окно Canvas? Да ещё использовать кучу фреймов? Canvas нужен ещё для чего-нибудь?
Офлайн
4
ramiЯ хочу иметь окно фиксированного размера, но длинный фрейм, и использовать прокрутку внутри.
А зачем вставлять Text в окно Canvas? Да ещё использовать кучу фреймов?
Офлайн
72
Вы хотите чтобы при прокрутке канваса сам текстовый виджет перемещался по экрану уступая место другим виджетам расположенным на канвасе?
Офлайн
4
ramiЯ хочу иметь родительский виджет строго заданного размера (например, root или Toplevel на 1024x768), и фрейм внутри него гораздо большего размера, см., например,
уступая место другим виджетам расположенным на канвасе?
.Отредактировано vanvanov (Март 20, 2019 11:52:57)
Офлайн
72
Теперь понятно. Позже посмотрю, как лучше это сделать.
Офлайн