Пакет tkinter против методов сетки: Появление полосы прокрутки - PullRequest
0 голосов
/ 04 марта 2020

Ниже показан правый нижний угол окна Tk, состоящего из фрейма, состоящего из холста и горизонтальной и вертикальной полос прокрутки. Это было достигнуто с использованием метода Grid.

Right bottom corner by the Grid method.

Я не могу повторить тот же вид, используя метод Pack. Ниже приводится то, что я получаю, и пример кода, дающий такой взгляд.

Right bottom corner by the Pack method.

Как мне воспроизвести внешний вид методом сетки, используя метод упаковки?

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
frame = ttk.Frame( root )
frame.pack()

ysb = ttk.Scrollbar( frame, orient='vertical' )
xsb = ttk.Scrollbar( frame, orient='horizontal' )

canvas = tk.Canvas( frame, width=1000, height=700, background='green')
canvas.create_rectangle( 100, 100, 900, 600, fill='yellow' )
canvas.configure( scrollregion=canvas.bbox(tk.ALL),
                  xscrollcommand=xsb.set,
                  yscrollcommand=ysb.set )

xsb.config( command=canvas.xview )
ysb.config( command=canvas.yview )

ysb.pack( side='right', fill='y', expand=1)
xsb.pack( side='bottom', fill='x', expand=1 )
canvas.pack( side='left', fill='both', expand=1 )

#ysb.grid( row=0, column=1, sticky='ns' )
#xsb.grid( row=1, column=0, sticky='ew' )
#canvas.grid( row=0, column=0, sticky='nsew' )

1 Ответ

2 голосов
/ 04 марта 2020

Вы можете использовать pady для достижения этого:

h = xsb.winfo_reqheight() # get the height of horizontal scrollbar
ysb.pack(side='right', fill='y', pady=(0,h)) # set bottom pady
...