Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2012 18:53:10

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Scroll

Как сделать вертикальную прокрутку окна(!) , если на нем много виджетов!

Офлайн

#2 Ноя. 30, 2012 20:18:51

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Scroll

Вопрос некорректный. Могу написать, как это сделать, но это не есть правильно. Пользователь не должен ничего крутить. Ты уверен, что без этого не обойтись??? Прокрутка поля с виджетами является плохим приемом построения графического окна. У такого окна будет плохая ментальная модель и пользователь не будет его запоминать, следовательно, он будет каждый раз в нем разбиратся и будет по этому поводу нервничать и дистанционно портить карму разработчику:). А если серьезно, то напиши, зачем тебе это надо и, возможно, я посоветую другой способ. Лучшим вариантом могут быть рамки, рассположние которых Вы скрываете или мастера…



Отредактировано 4kpt (Ноя. 30, 2012 20:20:49)

Офлайн

#3 Ноя. 30, 2012 22:04:10

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Scroll

Проблема в том что имеется программа примерно такая

# -*- 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, то на мониторе я вижу только несколько первых строк, как я могу увидеть все?

Офлайн

#4 Ноя. 30, 2012 23:38:26

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Scroll

jeka7
А если сделать в видет таблицы. Такой вариант Вам не подходит. Могу написать как это сделать в Вашем случае.

Если не подходит и необходимо одним столбцом (но по-моему мнению это гараздо более плохой варинат) - можно использовать

canvas.create_window().
В принципе, можно попробовать просто использовать и напрямую
canvas["yscrollcommand"]
Но я так не пробовал, поэтому необходимо смотреть как это делать.
Если не получится самостоятельно, я приведу пример…



Отредактировано 4kpt (Ноя. 30, 2012 23:48:00)

Офлайн

#5 Дек. 1, 2012 12:49:27

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Scroll

В виде таблицы не подходит.
canvas это же холст, зачем он? У меня уже есть созданное окно, на котором расположены комноненты, которые не “влазят” на монитор. Может есть еще какой-то способ увидеть все?

Офлайн

#6 Дек. 1, 2012 16:05:46

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Scroll

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().



Отредактировано 4kpt (Дек. 1, 2012 16:08:07)

Офлайн

#7 Дек. 1, 2012 17:40:32

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Scroll

Спасибо!

Офлайн

#8 Дек. 1, 2012 22:07:43

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Scroll

Да не за что…:)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version