web-dev-qa-db-fra.com

Impossible d'utiliser le pack du gestionnaire de géométrie à l'intérieur

Je crée donc un lecteur RSS à l'aide de la bibliothèque tkinter et, dans l'une de mes méthodes, je crée un widget texte. Il affiche bien jusqu'à ce que j'essaie d'ajouter des barres de défilement.

Voici mon code avant les barres de défilement: 

   def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'Word')
        self.textbox.grid(column = 0, row = 0)

Voici mon code après:

def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'Word')
        vertscroll = ttk.Scrollbar(root)
        vertscroll.config(command=self.textbox.yview)
        vertscroll.pack(side="right", fill="y", expand=False)
        self.textbox.config(yscrllcommand=vertscroll.set)
        self.textbox.pack(side="left", fill="both", expand=True)
        self.textbox.grid(column = 0, row = 0)

Cela me donne l'erreur 

_tkinter.TclError: impossible d'utiliser le pack du gestionnaire de géométrie à l'intérieur de .56155888 qui contient déjà des esclaves gérés par grid sur la ligne. vertscroll.pack (side = "right", fill = "y", expand = false)

Une idée de comment réparer ça?

10
user3623888

Par les docs , ne mélangez pas pack et grid dans la même fenêtre principale:

Avertissement: Ne mélangez jamais la grille et le paquet dans la même fenêtre principale. Tkinter passera avec plaisir le reste de votre vie à essayer de négocier un solution que les deux gestionnaires sont satisfaits. Au lieu d'attendre, tuez l'application, et jetez un autre coup d'oeil à votre code. Une erreur commune consiste à utiliser le mauvais parent pour certains des widgets.

Ainsi, si vous appelez grid dans la zone de texte, n'appelez pas pack dans la barre de défilement.


import Tkinter as tk
import ttk

class App(object):
    def __init__(self, master, **kwargs):
        self.master = master
        self.create_text()

    def create_text(self):
        self.textbox = tk.Text(self.master, height = 10, width = 79, wrap = 'Word')
        vertscroll = ttk.Scrollbar(self.master)
        vertscroll.config(command=self.textbox.yview)
        self.textbox.config(yscrollcommand=vertscroll.set)
        self.textbox.grid(column=0, row=0)
        vertscroll.grid(column=1, row=0, sticky='NS')

root = tk.Tk()
app = App(root)
root.mainloop()
16
unutbu

La raison du code est simple, vous ne POUVEZ PAS utiliser le pack et la grille dans la même classe ou pour le même cadre. Ainsi, utilisez un seul.

0
ThePerson