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?
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()
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.