2010-04-04 14 views
0

J'ajoute plusieurs widgets à un cadre qui se trouve dans un tix.NoteBook. Quand il y a trop de widgets pour tenir dans la fenêtre, je veux utiliser une barre de défilement, donc j'ai mis tix.ScrolledWindow à l'intérieur de ce cadre et ajouter mes widgets à cette fenêtre défilée à la place. Le problème est que lorsque vous utilisez le gestionnaire de géométrie grid(), la barre de défilement apparaît, mais elle ne fonctionne pas (la barre de défilement occupe toute la barre de défilement).Python Tkinter Tix: Comment utiliser ScrolledWindow avec grille dans Tix NoteBook

from Tkinter import * 
import Tix 

class Window: 

    def __init__(self, root): 

     self.labelList = [] 
     self.notebook = Tix.NoteBook(root, ipadx=3, ipady=3) 
     self.notebook.add('sheet_1', label="Sheet 1", underline=0) 
     self.notebook.add('sheet_2', label="Sheet 2", underline=0) 
     self.notebook.add('sheet_3', label="Sheet 3", underline=0) 
     self.notebook.pack() 
     #self.notebook.grid(row=0, column=0) 

     tab1=self.notebook.sheet_1 
     tab2=self.notebook.sheet_2 
     tab3=self.notebook.sheet_3 



     self.myMainContainer = Frame(tab1) 
     self.myMainContainer.pack() 
     #self.myMainContainer.grid(row=0, column=0) 

     scrwin = Tix.ScrolledWindow(self.myMainContainer, scrollbar='y') 
     scrwin.pack() 
     #scrwin.grid(row=0, column=0) 
     self.win = scrwin.window 


     for i in range (100): 
      self.labelList.append((Label(self.win))) 
      self.labelList[-1].config(text= "Bla", relief = SUNKEN) 
      self.labelList[-1].grid(row=i, column=0, sticky=W+E) 

root = Tix.Tk() 
myWindow = Window(root) 

root.mainloop() 

Chaque fois que je change au moins l'un des responsables de la géométrie pack()-grid(), le problème se produit. (En fait, je préfère utiliser grid() pour tous les conteneurs.)

Lorsque je n'utilise pas le widget NoteBook, le problème ne se produit pas non plus. Les autres exemples ici semblent tous dépendre de pack(). Des idées?
Un grand merci,
Sano

+0

Balise 'notebook' retirée dans le cadre du [nettoyage de 2012] (http://meta.stackexchange.com/questions/128315/the-great-stack-overflow-tag-question-cleanup-of-2012). –

Répondre

1

Je résolus sans utiliser'tix.scrolledWindow'. Au lieu de cela, je suis allé pour l'autoscrollbar suggéré par Fred Lundh here. Le problème principal était l'adaptation au widget NoteBook. D'abord, j'ai essayé de mettre la barre de défilement à la racine, de sorte qu'ils entourent toute la fenêtre. Maintenant, je voulais changer le crochet pour la barre de défilement à chaque fois que je changeais un onglet, mais le 'raiseecmd' du Notebook ne fonctionnait pas. Ensuite, j'ai pensé à utiliser l'événement configure sur chaque onglet - chaque fois qu'un nouvel onglet est levé, sa taille change et configure est appelé.
Eh bien, après beaucoup d'essai sans jamais être satisfait, j'ai changé mon approche et mis les barres de défilement à l'intérieur des onglets. Les onglets et tous les sous-conteneurs doivent avoir les paramètres'grid_columnconfigure (0, weight = 1) 'et'grid_rowconfigure (0, weight = 1)', sinon ils ne grossiront pas avec les onglets.