IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Comment rendre une Frame invisible sans rendre invisible les widgets contenus


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut Comment rendre une Frame invisible sans rendre invisible les widgets contenus
    Bonjour à tous,

    Alors je vous explique mon 'problème': on a le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    from tkinter import *
    import customtkinter
     
    class App(customtkinter.CTk):
     
        WIDTH = 1920
        HEIGHT = 1080
     
        def __init__(self):
            super().__init__()
     
     
            self.geometry(f"{App.WIDTH}x{App.HEIGHT}")
            self.maxsize(width=1920, height=1080)
            self.canvas1 = Canvas(self, width= 500, height=700, bg='cyan')
            self.canvas2 = Canvas(self, width= 500, height=700, bg='pink')
            self.frame1 = Frame(self.canvas1, width= 500, height=700, bg='blue')
            self.frame2 = Frame(self.canvas2, width= 500, height=700, bg='red')
     
            self.canvas1.grid(row = 0, column=0, sticky='nsew')
            self.canvas2.grid(row = 0, column=1, sticky='nsew')
            self.frame1.grid(row = 0, column=0, sticky='nsew')
            self.frame2.grid(row = 0, column=0, sticky='nsew')
     
            self.canvas1.grid_propagate(False)
     
            bu1 = Button(self.frame1, text='test')
            bu1.grid(row=0, column=0, padx = 100)
     
            bu2 = Button(self.frame1, text='test')
            bu2.grid(row=0, column=1, padx = 100)
     
     
     
    if __name__ == "__main__":
        app = App()
        app.mainloop()

    Mon but étant que les boutons apparaissent mais que le background de la frame ne soit pas visible, y'a-t-il une astuce pour cela?
    La méthode grid_forget() ne me convient pas car les boutons disparaissent logiquement avec)
    Le fait de fixer la même couleur de bg entre ma frame et le canvas correspondant, ne me convient pas non plus car je compte insérer une image dans ce canvas.
    Le fait de mettre cette image dans un Label et ensuite mettre ce label sur la frame en question, ne me convient pas non plus car derrière j'utilise des grid pour placer mes widgets. Et puis je n'ai pas envie de hack alors que si c'était possible d'insérer une image directement dans une Frame cela aurait été plus simple et plus propre (d'ailleurs je n'ai pas compris pourquoi cela n'est pas intégré comme pour d'autres widgets).

    Bref Le but est donc de donner 'l'illusion' que mes boutons seront directement fixé sur le canvas et non sur une frame.
    -Vous allez me dire 'pourquoi tu ne mettrais pas directement tes boutons sur le canvas dans ce cas là'
    -Et bien c'est parce-que je compte créer une scrollbar pour survoler une liste de boutons, or je serai obligé de mettre une frame en tant que window pour pouvoir survoler avec ma scrollbar.

    Quelqu'un pourrait m'aider à trouver une solution svp?
    Merci à tous.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Citation Envoyé par pycarpe Voir le message
    Mon but étant que les boutons apparaissent mais que le background de la frame ne soit pas visible, y'a-t-il une astuce pour cela?
    Les boutons étant affichés dans la Frame et ils ne sont visibles que si la Frame est visible.
    Le basique serait de "cacher" la Frame en dessous avec les widgets placés "dedans": par défaut, la Frame n'occupe que le nécessaire pour afficher les widgets.... vous n'en voulez pas, c'est votre choix mais pourquoi râler ensuite?

    => Il est possible d'afficher les Boutons "ailleurs" que dans la Frame "parent", mais c'est une utilisation avancée de tkinter (qui ne marchera peut être pas ici).

    Vous devez coder votre GUI avec ce qu'il sait faire i.e. reformuler ce que vous voulez faire en fonction de ce que sait faire le GUI... Et non pas vouloir la lune en espérant qu'il saura faire: c'est un outil, apprenez à l'utiliser...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Les boutons étant affichés dans la Frame et ils ne sont visibles que si la Frame est visible.
    Le basique serait de "cacher" la Frame en dessous avec les widgets placés "dedans": par défaut, la Frame n'occupe que le nécessaire pour afficher les widgets.... vous n'en voulez pas, c'est votre choix mais pourquoi râler ensuite?

    => Il est possible d'afficher les Boutons "ailleurs" que dans la Frame "parent", mais c'est une utilisation avancée de tkinter (qui ne marchera peut être pas ici).

    Vous devez coder votre GUI avec ce qu'il sait faire i.e. reformuler ce que vous voulez faire en fonction de ce que sait faire le GUI... Et non pas vouloir la lune en espérant qu'il saura faire: c'est un outil, apprenez à l'utiliser...

    - W
    Bonjour, pour vous je râle pour moi je m'interroge et répondre de cette manière aux personnes sollicitant ce forum est contre productif, mais je ne vais pas polémiquer avec vous on a l'habitude de votre tact ainsi que votre pédagogie légendaire wiztricks. Et je ne suis pas le premier à vous le faire comprendre.
    Bref après qu'on ait passé l'étape des attaques ad personam revenons en à ma discussion de base :
    J'avais déjà compris le comportement d'une frame par rapport à ses widgets enfants. J'ai bien compris que la frame s'adaptait à la dimension des widgets sauf avec un grid_propagate. Je n'ai pas de souci avec ça. Le souci pour moi c'est le style de son background. Et que lorsque la frame est sur un canvas parent sans image pas de souci car on peut faire correspondre les background de ces deux widgets. Mais dans le cas où le canvas contient une image c'est plus ennuyeux de rendre "invisible" le background de la frame.

    Donc, pour traduire votre message : il n'y a pas de solution à mon problème car tkinter n'est pas pensé pour ça. Pas besoin d'être désagréable. La prochaine fois, sans vouloir manquer de respect, je vous demanderai d'éviter de 'me venir en aide' malgré toute votre expérience. Je préfère quelqu'un de moins expérimenté mais plus pédagogue.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Citation Envoyé par pycarpe Voir le message
    Donc, pour traduire votre message : il n'y a pas de solution à mon problème car tkinter n'est pas pensé pour ça. Pas besoin d'être désagréable. La prochaine fois, sans vouloir manquer de respect, je vous demanderai d'éviter de 'me venir en aide' malgré toute votre expérience. Je préfère quelqu'un de moins expérimenté mais plus pédagogue.
    Ce n'est pas une bonne traduction.
    Pour le dire autrement, vous ne pouvez pas demander à tkinter de faire ce que vous voulez mais apprendre à réaliser ce que vous voulez avec tkinter.

    Citation Envoyé par pycarpe Voir le message
    Et que lorsque la frame est sur un canvas parent sans image pas de souci car on peut faire correspondre les background de ces deux widgets. Mais dans le cas où le canvas contient une image c'est plus ennuyeux de rendre "invisible" le background de la frame.
    Quel est l'intérêt (pourquoi) utiliser le Canvas comme Frame à moitié? à quoi sert la Frame?
    Pourquoi ne pas placer les widgets "dans" le Canvas (via create_window)?
    Et si le Canvas ne set qu'a avoir un "fond" et des widgets au dessus, pourquoi ne pas utiliser un Label?

    Ce n'est pas ma faute si vous ne prenez pas le temps de décrire le problème que vous cherchez à résoudre nous proposant de le deviner en postant un code qui n'éclaire pas trop ce que vous racontez.
    note: et si vous avez édité votre message après coup... ce n'est pas pour rien.


    Citation Envoyé par pycarpe Voir le message
    Et bien c'est parce-que je compte créer une scrollbar pour survoler une liste de boutons, or je serai obligé de mettre une frame en tant que window pour pouvoir survoler avec ma scrollbar.
    La scrollbar est associée a un Canvas (en fait à un widget scrollable)... et s'il n'y a qu'une rangée de Buttons, la Frame ne sert à rien (mais le background des Buttons ne sera pas transparent sauf à dessiner ses propres Buttons avec le Canvas).
    => C'est possible mais il faut le coder autrement... (avec ce qu'on peut faire avec tkinter).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce n'est pas une bonne traduction.
    Pour le dire autrement, vous ne pouvez pas demander à tkinter de faire ce que vous voulez mais apprendre à réaliser ce que vous voulez avec tkinter.



    Quel est l'intérêt (pourquoi) utiliser le Canvas comme Frame à moitié? à quoi sert la Frame?
    Pourquoi ne pas placer les widgets "dans" le Canvas (via create_window)?
    Et si le Canvas ne set qu'a avoir un "fond" et des widgets au dessus, pourquoi ne pas utiliser un Label?

    Ce n'est pas ma faute si vous ne prenez pas le temps de décrire le problème que vous cherchez à résoudre nous proposant de le deviner en postant un code qui n'éclaire pas trop ce que vous racontez.
    note: et si vous avez édité votre message après coup... ce n'est pas pour rien.




    La scrollbar est associée a un Canvas (en fait à un widget scrollable)... et s'il n'y a qu'une rangée de Buttons, la Frame ne sert à rien (mais le background des Buttons ne sera pas transparent sauf à dessiner ses propres Buttons avec le Canvas).
    => C'est possible mais il faut le coder autrement... (avec ce qu'on peut faire avec tkinter).

    - W
    Au lieu de me raconter votre vie dans votre premier message, pourquoi vous ne m'avez pas donné au moins une piste concrète genre 'Bonjour en effet la Frame n'est pas adapté à votre besoin car son bg se verra toujours sur un canvas parent contenant une image, je vous conseille plutôt d'utiliser seulement un canvas (donc sans frame) dont ses widgets enfants seront stockés dans un tableau pour pouvoir utiliser son length qui adaptera les coordonnées de la window, de cette façon tu ne galéreras pas avec le bg d'une frame' par exemple?

    Et pour la question du backgroud des Buttons ça m'est égal car ce n'était pas mon propos initial.
    Et pour la question de mon message modifié, c'est une fonctionnalité que ce site propose donc je l'utilise si je veux. N'essayez pas de rentrer dans de la psychanalyse inutile car c'est là aussi hors propos.

    Je vous conseille juste de revoir votre façon de parler aux gens qui ont le droit de connaître moins que vous et pour qui (excusez nous messire) certaines informations de la doc peuvent leur échapper. La mauvaise prise d'information peut vous toucher aussi et vous a déjà touché d'ailleurs et ce n'est pas pour autant que j'ai essayé de vous rabaisser. L'apprentissage se fait dans la correction pas dans l'humiliation.

    Bref la prochaine fois, j'aimerai échanger avec un interlocuteur plus agréable, donc inutile de répondre à mes prochaines questions car c'était la goutte de trop.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Citation Envoyé par pycarpe Voir le message
    Bref la prochaine fois, j'aimerai échanger avec un interlocuteur plus agréable, donc inutile de répondre à mes prochaines questions car c'était la goutte de trop.
    C'est comme pour tkinter, il va falloir apprendre à faire avec.
    Citation Envoyé par pycarpe Voir le message
    Et pour la question de mon message modifié, c'est une fonctionnalité que ce site propose donc je l'utilise si je veux.
    Absolument, ça permet de voir comment vous assumez vos âneries lorsqu'on vous met le nez dans le caca...
    Soyez un peu adulte ou allez poser vos questions à ChatGPT: un robot docile qui n'essaiera pas de comprendre le pourquoi de vos questions.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est comme pour tkinter, il va falloir apprendre à faire avec.


    Absolument, ça permet de voir comment vous assumez vos âneries lorsqu'on vous met le nez dans le caca...
    Soyez un peu adulte ou allez poser vos questions à ChatGPT: un robot docile qui n'essaiera pas de comprendre le pourquoi de vos questions.

    - W
    Il va falloir apprendre avec? Vous vous méprenez, car vous n'êtes pas le seul dans ce forum. Et si je décide de ne pas vous lire les prochaines fois où j'aurai besoin d'aide, ce sera mon choix.
    Si modifier son message veut dire ne pas assumer ses âneries alors en plus de ma personne, vous insultez également tous ceux qui ont usés de cette feature.
    Et si pour vous être adulte c'est accepter de se faire rabaisser et vous empêcher de penser alors vous avez une vision bien étriqué de la chose, d'autant plus que c'est assez ironique venant d'une personne qui traite les gens qui se questionnent de râleurs et d'ânes.

    Concernant ChatGPT, je ne suis pas partisan du tout cuit justement car figurez-vous que je crois encore aux échanges humains et respectueux sinon je ne m'embêterais pas à solliciter un forum. Je crois encore que l'on peut échanger avec des gens plus compétent que soi sans que ces derniers se sentent obligés de vous insulter. Bref wiztricks, peut-être que vous ne vous en rendez pas compte, mais vous êtes un danger pour ceux qui veulent apprendre et je ne suis pas le premier à vous le faire savoir. Et je déconseille aux gens qui lieront ce message de choisir la facilité avec Chat GPT parce-qu'ils auront eu affaire à des gens aigris et dépressifs comme vous.
    Je ne cesserai jamais de me questionner même si ce sont des questions bêtes et je ne laisserai jamais des gens comme vous qui prennent ce forum et le manque d'expérience des gens, comme un exutoire en leur pissant dessus.

    Le fait que vous soyez en roue libre et que personne ne vous ait fait fermer votre clapet pour votre manque de respect, vous a fait oublier le but d'un forum.

    Bref le sujet est clos et résolu.

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 602
    Par défaut
    Lorsqu'on édite le message initial, il est de bon ton d'indiquer dans le-dit message (par un edit : j'ai corrigé ceci) pourquoi on l'a corrigé.

    Je ne parle pas de phrase incomplète rectifiée ou de correction de fôttes d'aurtaugrafe, mais surtout si la teneur du propos a changé entre le texte initial et sa version actuelle.

    Or, certaines réponses de wiztricks laissent sous-entendre que vous avez foncièrement revu ce texte, si bien que certaines allusions de wiztricks ne semblent plus faire sens.

    Pour ceux arrivant plus tard et découvrant le sujet, c'est pas simple.

    D'accord sinon pour chatGPT. Je vois déjà les effets néfastes dans mon job avec certains collègues qui sont tout fiers de "gagner du temps" (mais certainement pas des neurones) grâce à ce bidule. C'est tant rigolo que navrant de les voir ramer comme des galériens lorsque, par malheur, leur outil à tout faire ne les satisfait pas. Et comme chez nous, nous travaillons en TDD avec des outils spécifiques validés par notre tech lead, les voir en baver pour rédiger des tests sur un code torché par le chat qui a des gaz fait bien sourire.

    Edit : voilà ce que c'est que de rédiger un truc en anglais toute la matinée. J'ai écris gazes au lieu de gaz dans la dernière phrase, oups

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Lorsqu'on édite le message initial, il est de bon ton d'indiquer dans le-dit message (par un edit : j'ai corrigé ceci) pourquoi on l'a corrigé.

    Je ne parle pas de phrase incomplète rectifiée ou de correction de fôttes d'aurtaugrafe, mais surtout si la teneur du propos a changé entre le texte initial et sa version actuelle.

    Or, certaines réponses de wiztricks laissent sous-entendre que vous avez foncièrement revu ce texte, si bien que certaines allusions de wiztricks ne semblent plus faire sens.

    Pour ceux arrivant plus tard et découvrant le sujet, c'est pas simple.

    D'accord sinon pour chatGPT. Je vois déjà les effets néfastes dans mon job avec certains collègues qui sont tout fiers de "gagner du temps" (mais certainement pas des neurones) grâce à ce bidule. C'est tant rigolo que navrant de les voir ramer comme des galériens lorsque, par malheur, leur outil à tout faire ne les satisfait pas. Et comme chez nous, nous travaillons en TDD avec des outils spécifiques validés par notre tech lead, les voir en baver pour rédiger des tests sur un code torché par le chat qui a des gaz fait bien sourire.

    Edit : voilà ce que c'est que de rédiger un truc en anglais toute la matinée. J'ai écris gazes au lieu de gaz dans la dernière phrase, oups
    J'invite wiztricks à révéler mes modifications apportées puisque apparemment il en a eu connaissance. Ainsi, on reparlera du terme 'foncièrement' à ce moment là.
    Quoiqu'il en soit, cette personne qui est wiztricks est souvent en roue libre concernant sa façon de répondre aux gens qui ont besoin d'aide, ce n'est pas un cas isolé. Qu'il se remette en question sur ce point et on aura moins de dérives inutiles de ce genre là.

    Merci d'avoir corroboré l'idée que j'en fait de Chat GPT mais bon ce n'est pas le sujet initial (qui est clos d'ailleurs) de la conversation En tout cas, c'est contre productif de sous entendre aux gens qu'ils doivent 'soit accepter de se laisser insulter soit ils vont voir Chat GPT'. Mais quand j'aurai envi de parler de ChatGPT à l'occasion je créerai ou rejoindrai une discussion prévu à cet effet histoire de ne pas être hors sujet.

    A++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment rendre dynamique les noms des colonnes d'une vue
    Par patic dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/02/2009, 10h41
  2. [PHP] Comment actualiser une frame à partir d'une autre ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/10/2005, 12h03
  3. Réponses: 6
    Dernier message: 27/10/2005, 21h12
  4. Réponses: 1
    Dernier message: 11/04/2005, 09h59
  5. Comment tuer une frame
    Par tymous dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 28/07/2004, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo