Найти - Пользователи
Полная версия: Scroll
Начало » GUI » Scroll
1
jeka7
Как сделать вертикальную прокрутку окна(!) , если на нем много виджетов!
4kpt
Вопрос некорректный. Могу написать, как это сделать, но это не есть правильно. Пользователь не должен ничего крутить. Ты уверен, что без этого не обойтись??? Прокрутка поля с виджетами является плохим приемом построения графического окна. У такого окна будет плохая ментальная модель и пользователь не будет его запоминать, следовательно, он будет каждый раз в нем разбиратся и будет по этому поводу нервничать и дистанционно портить карму разработчику:). А если серьезно, то напиши, зачем тебе это надо и, возможно, я посоветую другой способ. Лучшим вариантом могут быть рамки, рассположние которых Вы скрываете или мастера…
jeka7
Проблема в том что имеется программа примерно такая
# -*- 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()
если начальное число ввести например 100, то на мониторе я вижу только несколько первых строк, как я могу увидеть все?
4kpt
jeka7
А если сделать в видет таблицы. Такой вариант Вам не подходит. Могу написать как это сделать в Вашем случае.

Если не подходит и необходимо одним столбцом (но по-моему мнению это гараздо более плохой варинат) - можно использовать
canvas.create_window().
В принципе, можно попробовать просто использовать и напрямую
canvas["yscrollcommand"]
Но я так не пробовал, поэтому необходимо смотреть как это делать.
Если не получится самостоятельно, я приведу пример…
jeka7
В виде таблицы не подходит.
canvas это же холст, зачем он? У меня уже есть созданное окно, на котором расположены комноненты, которые не “влазят” на монитор. Может есть еще какой-то способ увидеть все?
4kpt
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()
Единственное, это то что Вы должны сами регулировать scrollregion().
jeka7
Спасибо!
4kpt
Да не за что…:)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB