Problème d'affichage d'items dans canvas

Résolu/Fermé
pycarpe Messages postés 16 Date d'inscription lundi 24 janvier 2022 Statut Membre Dernière intervention 9 août 2022 - 6 août 2022 à 08:58
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 - 10 août 2022 à 09:29

Bonjour, 

Je suis débutant sur python. 

J'ai un problème d'affichage d'items dans mon canvas. 

Dans l'image que j'ai attaché là, vous pouvez constater que entre la ligne 1999 et celle juste au-dessus il y a un problème...Cela passe de (X = 1245) à 1999. À noter que si je relance le programme sans rien changer le X peut changer de façon aléatoire sans savoir pourquoi. Bref en tout cas il y a un couak à partir d'un certain nombre de lignes affichées. À noter que sur une range de 1000 par exemple tout va bien. Mais à partir d'une certaine range le problème apparait.

Quelqu'un peut m'aider à comprendre svp? Merci.

from tkinter import *
from tkinter import ttk
import tkinter as tk

class Main_frame(Frame):
    
    # Init
    def __init__(self, fenetre_principale=None):

       
        tk.Frame.__init__(self, fenetre_principale)


      
        self.grid(sticky = "news")

        self.main_frame = tk.Frame(self, bg = "blue")
        self.main_frame.grid(sticky = "news")
       


        self.frame_canvas = tk.Frame(self.main_frame, bg = "yellow")
        self.frame_canvas.grid(row = 2, column = 0, pady = 5, sticky="nw")
        self.frame_canvas.grid_rowconfigure(0, weight=1)
        self.frame_canvas.grid_columnconfigure(0, weight=1)

        self.frame_canvas.grid_propagate(False)

        self.canvas = tk.Canvas(self.frame_canvas, bg  = "yellow")
        self.canvas.grid(row = 0, column = 0, sticky='news')

        self.vbar = tk.Scrollbar(self.frame_canvas, orient = "vertical", command = self.canvas.yview)
        self.vbar.grid(row = 0, column = 1, sticky = "ns")
        self.canvas.configure(yscrollcommand= self.vbar.set)
        self.frame_buttons = tk.Frame(self.canvas, bg = "grey")
        self.canvas.create_window((0, 0), window=self.frame_buttons, anchor="nw")



        self.ajout()




        
    def ajout(self):
        self.bu_aj = tk.Button(self.main_frame, text = "Ajout", command = self.update_).grid(row = 0, column= 0, pady = 5, sticky="nw")
    
    def update_(self):
        

        for k in range(2000):
            self.bu = tk.Button(self.frame_buttons, text = f"Test{k}")
            self.bu.grid(row = k, column= 0, sticky="news")
            self.frame_buttons.update_idletasks()

            first5columns_width = sum([self.bu.winfo_width() for j in range(0, 15)])
            first5rows_height = sum([self.bu.winfo_height() for i in range(0, 5)])
            self.frame_canvas.config(width=first5columns_width + self.vbar.winfo_width(),height=first5rows_height)
        
            self.canvas.config(scrollregion=self.canvas.bbox("all"))
        print("ok")

  
if __name__ == "__main__":
    root = tk.Tk()
    root.grid_rowconfigure(0, weight=1)
    root.columnconfigure(0, weight=1)
    root.title("Title")
    interface = Main_frame(fenetre_principale=root)
    interface.mainloop()
A voir également:

2 réponses

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
6 août 2022 à 09:12

bonjour,

Il serait plus propre, en effet, que tu reçoives un message d'erreur t'informant que tu es trop gourmand.
Ceux qui t'offrent ce code n'ont sans doute pas testé toutes les situations possibles.

T'attends-tu réellement à pouvoir afficher autant de boutons que tu le souhaites?

0
pycarpe Messages postés 16 Date d'inscription lundi 24 janvier 2022 Statut Membre Dernière intervention 9 août 2022
6 août 2022 à 10:53

Hello,

Merci d'avoir répondu aussi vite déjà.

Ca veut dire quoi être gourmand?... La limite est fixé par quoi exactement? Je pensais que la limite était fixé par la config de mon pc seulement...

0

Salut, "gourmand" est plus dans l'occupation mémoire, d'ailleurs bug avec ttk sur mon système qui résume pourquoi y a une telle limitation de tcl/tk.

_____

# X Error of failed request:  BadAlloc (insufficient resources for operation)
  # Major opcode of failed request:  53 (X_CreatePixmap)
  # Serial number of failed request:  119
  # Current serial number in output stream:  127

_____                           .

Dans quel optique as-tu besoin de générer autant de boutons ?

Et si la justification de ce besoin était établi, il vaudrait mieux générer les bouton à la volée plutôt que d'en générer 2000 d'un coup.

                                   .

**HS**

Purée, mais remettez l'ancien système d'édition de ccm, je ne sais pas comment les membres peuvent supporter ce truc foutant du js dans un div au lieu de laisser un textarea qui bizarrement est destiné à ça...

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477 > gromeleur
Modifié le 6 août 2022 à 18:55

Il existe un forum "bugs et suggestions CCM".

0
gromeleur > yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024
7 août 2022 à 14:12

Salut, yep je sais, mais à quoi bon ? Je ne suis qu'un visiteur, mon avis importe peu, ce nouveau système n'a l'air de gêner aucun membres, en effet ce n'est pas le lieu pour discuter de cela, désolé.

0
pycarpe Messages postés 16 Date d'inscription lundi 24 janvier 2022 Statut Membre Dernière intervention 9 août 2022 > gromeleur
7 août 2022 à 20:07

Hello, je n'ai pas de but particulier, je cherche seulement à comprendre même si je pense qu'il peut y avoir une utilité à générer 2000 items suivant ce qu'on veut faire.

Les générer à la voler ne change rien j'ai déjà essayé avec une automatisation du click one by one avec pyautogui.

Bref en tout cas visiblement c'est assez limité je trouve. Merci en tout cas pour ta réponse. A+

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477 > pycarpe Messages postés 16 Date d'inscription lundi 24 janvier 2022 Statut Membre Dernière intervention 9 août 2022
7 août 2022 à 20:41

Tu utilises des logiciels qui te sont offerts gratuitement par des bénévoles.  SI tu trouves qu'ils sont limités, n'hésite pas à investir tes compétences pour améliorer ces logiciels.

0