Форум сайта python.su
Как сделать вертикальную прокрутку окна(!) , если на нем много виджетов!
Офлайн
Вопрос некорректный. Могу написать, как это сделать, но это не есть правильно. Пользователь не должен ничего крутить. Ты уверен, что без этого не обойтись??? Прокрутка поля с виджетами является плохим приемом построения графического окна. У такого окна будет плохая ментальная модель и пользователь не будет его запоминать, следовательно, он будет каждый раз в нем разбиратся и будет по этому поводу нервничать и дистанционно портить карму разработчику:). А если серьезно, то напиши, зачем тебе это надо и, возможно, я посоветую другой способ. Лучшим вариантом могут быть рамки, рассположние которых Вы скрываете или мастера…
Отредактировано 4kpt (Ноя. 30, 2012 20:20:49)
Офлайн
Проблема в том что имеется программа примерно такая
# -*- coding: UTF-8 -*- import Tkinter def button_clicked(ev): n = int(ent1.get()) win = Tkinter.Toplevel(root) win.focus_force() all_ent = [] for i in xrange(n): ent = Tkinter.Entry(win, width=20, bd=3, font='arial 14') ent.grid(in_=win, row=i+1, column=1, pady=10) all_ent.append(ent) win.mainloop() root = Tkinter.Tk() btn = Tkinter.Button(root, text='Далее', width=5, height=2, bg='white', fg='black', font='arial 14') ent1 = Tkinter.Entry(root, width=20, bd=3, font='arial 14') ent1.focus_force() ent1.pack() btn.pack() btn.bind('<Button-1>', button_clicked) root.mainloop()
Офлайн
jeka7
А если сделать в видет таблицы. Такой вариант Вам не подходит. Могу написать как это сделать в Вашем случае.
Если не подходит и необходимо одним столбцом (но по-моему мнению это гараздо более плохой варинат) - можно использовать
canvas.create_window().
canvas["yscrollcommand"]
Отредактировано 4kpt (Ноя. 30, 2012 23:48:00)
Офлайн
В виде таблицы не подходит.
canvas это же холст, зачем он? У меня уже есть созданное окно, на котором расположены комноненты, которые не “влазят” на монитор. Может есть еще какой-то способ увидеть все?
Офлайн
jeka7
Вы не умеете слушать… Просто напишите, что Вы не поняли, о чем идет речь и не спорьте. Так будет правильнее. То, что Вы хотите выглядит примерно так…
import Tkinter def button_clicked(ev): n = int(ent1.get()) win = Tkinter.Toplevel(root) cnv = Tkinter.Canvas(win, width = 240, height = 400, bg = "grey") Frm = Tkinter.Frame(win) Frm.pack() sb = Tkinter.Scrollbar(win, command = cnv.yview, orient = "vertical", takefocus = 0) all_ent = [] for i in xrange(n): ent = Tkinter.Entry(Frm, width=20, bd=3, font='arial 14') ent.pack(pady=10) all_ent.append(ent) all_ent[0].focus_force() wd = cnv.create_window(120, 0, anchor = "n", window = Frm) cnv.itemconfig(wd, state = "normal") cnv.config(yscrollcommand = sb.set, scrollregion = (0, 0, 100, 5000)) cnv.pack(side = "left", fill = "y") sb.pack(side = "right", fill = "y") root = Tkinter.Tk() btn = Tkinter.Button(root, text='Далее', width=5, height=2, bg='white', fg='black', font='arial 14') ent1 = Tkinter.Entry(root, width=20, bd=3, font='arial 14') ent1.focus_force() ent1.pack() btn.pack() btn.bind('<Button-1>', button_clicked) root.mainloop()
Отредактировано 4kpt (Дек. 1, 2012 16:08:07)
Офлайн
Спасибо!
Офлайн
Да не за что…:)
Офлайн