from tkinter import Tk, Scrollbar, Canvas, Frame, Label, Button, Checkbutton
from tkinter.ttk import Panedwindow, Combobox
class Myframe(Frame):
"""
Создаёт фрейм с полосой прокрутки справа.
После добавления или удаления виджетов в прокручиваемый фрейм,
вызывается метод update(), чтобы обновить прокручиваемую область.
"""
def __init__(self, frame, **kw):
scrollbar = Scrollbar(frame)
scrollbar.pack(side='right', fill='y', expand=False)
self.canvas = Canvas(frame, yscrollcommand=scrollbar.set)
self.canvas.pack(side='left', fill='both', expand=True)
scrollbar.config(command=self.canvas.yview)
Frame.__init__(self, frame, **kw) #инициализация базового класса
self.windows_item = self.canvas.create_window(0,0, window=self, anchor='nw')
self.canvas.config(**kw)
def update(self):
"""Обновляет canvas и область прокрутки"""
self.update_idletasks()
self.canvas.config(scrollregion=self.canvas.bbox(self.windows_item))
def foo():
"Функция для примера"
print('Вспомогательные словари...')
root = Tk()
root.title('Параметры Word')
root.resizable(width=False, height=False)
pw = Panedwindow(root) #боковое меню с кнопками
pw.pack(side="left", fill="both", expand=True)
pw.add(Label(text='Основные', anchor='w'))
pw.add(Button(text='Экран', anchor='w'))
pw.add(Label(text='Настройка', anchor='w'))
pw.add(Button(text='Правописание', anchor='w'))
pw.add(Button(text='Центр управления безопасностью', anchor='w'))
pw.add(Frame())
header = Frame(root)
header.pack()
body = Frame(root)
body.pack()
footer = Frame(root)
footer.pack()
Label(header, text="Настройки правописания:").pack()
Label(footer, text="Доступные действия:").pack(side='left', ipadx=20)
Button(footer, text='Отменить').pack(side='left', ipadx=20)
Button(footer, text='Закрыть').pack(side='left', ipadx=20)
fr = Myframe(body, width=500, height=300)
#наполняем фрейм виджетами
Checkbutton(fr, text='Пропускать слова из прописных букв').grid(column=0, row=0, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова с цифрами').grid(column=0, row=1, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать адреса Интернета и имена файлов').grid(column=0, row=2, columnspan=3, sticky='w')
Checkbutton(fr, text='Помечать повторяющиеся слова').grid(column=0, row=3, columnspan=3, sticky='w')
Checkbutton(fr, text='Немецкий: применять новые правила').grid(column=0, row=4, columnspan=3, sticky='w')
Checkbutton(fr, text='Предлагать только из основного словаря').grid(column=0, row=5, columnspan=3, sticky='w')
Button(fr, text='Вспомогательные словари...', command=foo).grid(column=0, row=6, columnspan=2, sticky='w', pady=15)
Label(fr, text='При исправлении правописания в Word', anchor='w').grid(column=0, row=7, columnspan=3, sticky='w')
Label(fr, text='Набор правил: ').grid(column=0, row=8, pady=15)
Combobox(fr, values=['Для деловой переписки', 'Пропускать слова']).grid(column=1, row=8)
Button(fr, text='Настройка').grid(column=2, row=8)
Button(fr, text='Повторная проверка').grid(column=0, row=9, pady=15)
Label(fr, text='Исключения для файла: ').grid(column=0, row=10, pady=15)
Combobox(fr, values=['Документ WordPad.doc', 'Пропускать слова.doc']).grid(column=1, row=10)
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=11, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=12, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=13, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=14, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=15, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=16, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=17, columnspan=3, sticky='w')
Checkbutton(fr, text='Пропускать слова').grid(column=0, row=18, columnspan=3, sticky='w')
fr.update()
root.mainloop()