2011-10-11 17 views
18

Sto provando a far scorrere una tela. Tuttavia, quando tento di impostare le barre di scorrimento per lavorare con la tela, tkinter sembra ignorare completamente le dimensioni che avevo inizialmente impostato per la tela. Ho provato a riempirli tutti in una cornice, impostando la tela per riempire la cornice e quindi impostando la dimensione della cornice, ma questo presenta lo stesso problema a meno che non imposti la cornice per riempire la finestra, che non è quello che voglio . Fondamentalmente, voglio una tela di dimensioni fisse con barre di scorrimento su di essa. Il mio codice attuale assomiglia a questo (in Python 3.1):python e tkinter: utilizzo di barre di scorrimento su una tela

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(canvas,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(canvas,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

risposta

26

vostre barre di scorrimento devono avere il telaio come un genitore, non il Canvas:

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(frame,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(frame,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

Il motivo per cui questo funziona è dovuto al modo pack funziona. Per impostazione predefinita, tenterà di ridurre (o far crescere) un contenitore per adattarlo esattamente ai suoi figli. Poiché le barre di scorrimento sono figli della tela nell'esempio originale, la tela si restringe per adattarsi.

Se si desidera che le barre di scorrimento vengano visualizzate all'interno dell'area di disegno, il trucco consiste nell'utilizzare una cornice aggiuntiva. Posiziona la tela e le barre di scorrimento in questa cornice interna, capovolgi i bordi della tela e avanti per la cornice. Imposta lo sfondo della cornice in modo che sia uguale alla tela e apparirà che le barre di scorrimento si trovano all'interno dell'area di disegno.

+0

Perché dobbiamo imballare la tela per ultimo? Ho notato che quando impacco la tela prima di qualsiasi barra di scorrimento finisce per sovrapporre la barra di scorrimento orizzontale - Ho appena iniziato a usare tkinter, ma pensavo che il pacchetto non si sovrapponesse a qualcosa. Grazie – Lanfear

+1

E il core è 'scrollregion = (0,0,500,500)', senza di esso l'intero non può funzionare !! – Turtle

Problemi correlati