Найти - Пользователи
Полная версия: Как скролить Canvas?
Начало » GUI » Как скролить Canvas?
1
czarkoff
Прикручиваю к Canvas Scrollbar, размещаю на Canvas много виджетов, и Canvas увеличивается до их общего размера, окно увеличивается под Canvas, Scrollbar остаётся непрокручиваемым.
from Tkinter import *

editorWindow = Tk()

scroll = Scrollbar(editorWindow)
scroll.grid(sticky = E+W+S+N, row = 4, column = 3)
editCanvas = Canvas(editorWindow, bd = 0, yscrollcommand = scroll.set,
height = 300)
editCanvas.grid(sticky = E+W+S+N, row = 4, column = 0, columnspan = 3)

i = 0
for i in range(100):
Button(editCanvas, <...>).grid(row = i, column = 0)
Entry(editCanvas, <...>).grid(row = i, column = 1)
Entry(editCanvas, <...>).grid(row = i, column = 2)
Entry(editCanvas, <...>).grid(row = i, column = 3)

scroll.config(command = editCanvas.yview)
editCanvas.config(scrollregion=editCanvas.bbox(ALL))
editCanvas.config(height = 30)

editorWindow.mainloop()
Что я сделал не так?
hildi
Аналогичная фигня случилась и в нашей деревне.

Может, есть простое решение?

Гугл предлагает размещать виджеты на Canvas при помощи create_что-нибудь, но вдруг есть более простой и приятный вариант?
hildi
все, спасибо, разобралась.

#!/usr/bin/python
# -*- coding: utf-8 -*-

# GUI Module
from Tkinter import *
import Tix

#XML
import libxml2 as lx

#System
import subprocess, atexit
from sys import exit



class ReportView:

def __init__(self, w, selectedDict):
self.report = w
self.exit = -1

counter = 0

frm_info = Frame(w, relief = SUNKEN)

frm_Buttons = Frame(w, pady = 10, padx = 10, relief=RIDGE)


canvas_info = Canvas(frm_info, height = 580, width = 330)
frm_inner = Frame(canvas_info)
sbar = Scrollbar(frm_info, command=canvas_info.yview, orient=VERTICAL, takefocus=0)

window_info = canvas_info.create_window(0, 0, window = frm_inner,anchor=NW)
canvas_info.itemconfig (window_info, state = NORMAL)
canvas_info.configure(yscrollcommand=sbar.set, scrollregion=(0,0,1000,5000))

def ttest():
counter = 0
for i in range(50):
label_TGConfig = Label(frm_inner, text = "Test row "+str(counter))
label_TGConfig.pack()
counter +=1

self.report.update()

frm_info.pack()
sbar.pack(side=RIGHT,fill=Y)
canvas_info.pack()
#frm_inner.pack()

btn_close = Button(frm_Buttons, text = "Test", pady = 2, padx = 8, width = 10, command = ttest)
btn_close.grid(row = 0, column = 1, sticky = "W")

frm_Buttons.pack()

def mainloop(self):
self.report.mainloop()




#-------- Lose Funktionen-----------------

def runXMLviewer():
report = Tix.Tk() # Report Fenster
report.title = "pyTestRunner ReportView"
d = {}
shlist = ReportView(report, d)
shlist.mainloop()

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