Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Не работает Scrollbar для Canvas (Python ttk) [RSS Feed]

#1 Март 10, 2016 11:11:55

Submersed
Зарегистрирован: 2016-01-06
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

Добрый день!
Столкнулся со следующей проблемой… Рисую Canvas и Scrollbar к нему. В Canvas у меня располагается меню Checkbutton.
Задача заключается в том, чтобы при возростании пунктов меню Checkbutton, можно было прокручивать Canvas. Но, почему-то, Scrollbar:
1) остается неактивным (при использовании “bbox”),
2) стает активен, но его прокрутка не производит никаких видимых действий, при фиксированном задании значений для scrollregion
Подскажите, пожалуйста, что я делаю не так? Благодарю.

Код прилагается:

from tkinter import *
from tkinter.ttk import *
import os
root = Tk()
directory = os.getcwd()
menuDirectory = directory + '\\menu\\'
files = sorted(os.listdir(menuDirectory))
f0 = open(menuDirectory + files[0], 'r')
app0 = f0.readlines()
f0.close()
root.title('Program')
root.minsize(width=750,height=300)
root.maxsize(width=750,height=300)
root['borderwidth'] = 15
canvas0 = Canvas(root,width=400,heigh=1600)
canvas0['highlightthickness'] = 0
canvas0.pack(side=LEFT,fill=BOTH,expand=True)
canvas0.pack_propagate(False)
canvas0.configure(scrollregion=canvas0.bbox("all"))
scroll0 = Scrollbar(root,orient=VERTICAL)
scroll0.config(command=canvas0.yview)
canvas0.configure(yscrollcommand=scroll0.set)
scroll0.pack(side=RIGHT,fill=Y)
i=1
u=2
root.vars={}
for q in app0:
    x0 = q.split('*')[0]
    root.var=BooleanVar()
    ch0 = Checkbutton(canvas0,text=x0,variable=root.var,onvalue=True,offvalue=False)
    ch0.grid(row=u,column=i,ipadx=20,padx=5,pady=10,sticky='nsew')
    ch0.grid_propagate(False)
    if i<4:
        i+=1
    else:
        u+=1
        i=1
    root.var.set(False)
    root.vars[q] = root.var
root.mainloop()

Отредактировано Submersed (Март 10, 2016 12:38:19)

Офлайн

#2 Март 10, 2016 16:07:45

drevoborod
Зарегистрирован: 2016-03-09
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

Прошу прощения за offtop, просто хочу понять: а почему был выбран Canvas? Я для аналогичной задачи выбрал Text, правда, огрёб совершенно неожиданные грабли. Но, может быть, вам больше повезёт?
А по теме - возможно, у вас проблема в том, что у вас нет корректного соотношения координат окна с координатами области прокрутки. Вот тут есть некоторые объяснения:

The scrollregion option is used to limit scrolling operations for the canvas. To set this, you can usually use something like:

canvas.config(scrollregion=canvas.bbox(ALL))
To convert from window coordinates to canvas coordinates, use the canvasx and canvasy methods:

def callback(event):
canvas = event.widget
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
print canvas.find_closest(x, y)

Прошу прощения, если это не то - я сам пока изучаю Tkinter и с Canvas ещё не разобрался, поэтому и решил пока использовать более простой Text.

Офлайн

#3 Март 10, 2016 20:55:56

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

Запостил уже в другом вопросе. Продублирую. Пример для 2.7. Для 3.Х нужно поменять Tkinter на tkinter

import Tkinter
#
def reconf_canvas(event):
    canv.configure(scrollregion=canv.bbox('all'))
#
root = Tkinter.Tk()
root.geometry("400x400+100+100")
#
canv = Tkinter.Canvas(root, width=200, height=200)
canv.grid(row=0, column=0)
#
frm = Tkinter.Frame(canv)
frm.pack()
#
scr = Tkinter.Scrollbar(root)
scr.grid(row=0, column=1, sticky="ns")
scr["command"] = canv.yview
canv["yscrollcommand"] = scr.set
canv.create_window((0,0), window=frm, anchor="nw")
frm.bind("<Configure>", reconf_canvas)
#
for i in xrange(20):
    but = Tkinter.Button(frm, text=u"Кнопка %01d" % i)
    but.pack()
#
root.mainloop()

Офлайн

#4 Март 11, 2016 11:24:59

Submersed
Зарегистрирован: 2016-01-06
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

4kpt_IV
Запостил уже в другом вопросе. Продублирую. Пример для 2.7. Для 3.Х нужно поменять Tkinter на tkinter
Огромное спасибо. Все заработало.
Появился еще 1 вопрос
Как сделать так, чтобы при прокрутке колесика мыши прокручивалось и поле с чекбоксами?
Благодарю.

Офлайн

#5 Март 11, 2016 20:42:27

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

Какая ось?

Офлайн

#6 Март 11, 2016 22:43:51

Submersed
Зарегистрирован: 2016-01-06
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

4kpt_IV
Какая ось?
Windows (7, 8, 10)

Офлайн

#7 Март 13, 2016 10:10:14

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает Scrollbar для Canvas (Python ttk)

Событие MouseWhell

Офлайн

  • Начало
  • » GUI
  • » Не работает Scrollbar для Canvas (Python ttk)[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version