logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 Re : Réseau » question préliminaire montage serveur autohébergé » 10-11-2023 08:29:21

tartare
Hello,
Personnellement, j'ai fait un peu la meme. ufw sur le 443 (https) et 587 (les mails). j'ai interdit le 80. Le ssh, idem, j'ai modifié le port et interdit toutes les IPs excepté celle de ma machine cliente. Cela semble fonctionner mais comme déja dit, ce n'est pas spécialement pour moi, plus pour l'ordinateur de ma coloc. Depuis que j'ai posé la question, elle ne s'est pas encore connectée de la maison, donc...Wait and see.

Merci pour ta reponse.
Bonne journée a toi.
tartare

#2 Réseau » question préliminaire montage serveur autohébergé » 08-10-2023 16:32:22

tartare
Réponses : 2
Bonjour a toutes et tous.
Voilà, je souhaiterai monter un serveur autohébergé (serveur web + serveur python, Node, Symfony, ...) sur un ordinateur personnel sous
debian Bookworm.
J'ai quand même une petite question avant de tenter, tester quoi que ce soit.
La configuration est basique (je n'ai pas encore touché aux réglages par défaut de la freebox)
mais il y a un détail important à mes yeux.
On est 2 sur le réseau et la seconde personne travaille dans un milieu... "sensible" (médical).
Cette personne fait du télétravail et se connecte depuis chez nous (depuis
son ordinateur windows) à son reseau professionnel.
Si je monte un serveur, la question est: "quand est ce que je me ferai pirater?" <<< ça ne me dérange pas
plus que ça, je ne travaille pas dans le monde de l'informatique et ne me sers pas
d'un ordinateur (ni smartphone) dans mon travail. Donc quand mon serveur se fera pirater
sera t-il possible à l'attaquant de passer par mon serveur ou mes ordinateurs clients connectés
pour aller fouiner sur l'ordinateur de ma "coloc"?

En vous remerciant de votre réponse.
tartare.

#3 Re : Système » plus de MAJ noyau par apt » 23-12-2022 18:59:33

tartare
@CloDeClo

voici mon sources.list


deb [url]http://security.debian.org/debian-security[/url] bullseye-security main contrib
deb-src [url]http://security.debian.org/debian-security[/url] bullseye-security main contrib

# Debian Bullseye, dépôt principal + paquets non libres
deb [url]http://deb.debian.org/debian/[/url] bullseye main contrib non-free
deb-src [url]http://deb.debian.org/debian/[/url] bullseye main contrib non-free
     
# Debian Bullseye, mises à jour de sécurité + paquets non libres
deb [url]http://deb.debian.org/debian-security/[/url] bullseye-security main contrib non-free
deb-src [url]http://deb.debian.org/debian-security/[/url] bullseye-security main contrib non-free
     
# Debian Bullseye, mises à jour "volatiles" + paquets non libres
deb [url]http://deb.debian.org/debian/[/url] bullseye-updates main contrib non-free
deb-src [url]http://deb.debian.org/debian/[/url] bullseye-updates main contrib non-free
 



le depot update, si je ne dis pas de betise est present a la derniere L (en + je n'ai jamais modifié ce fichier depuis que je l'ai installé, dc..? pourquoi ca marchait avt et plus maintenant?).
je vais me renseigner voir ce qu'est gpk-update-viewer.

Merci de ta reponse.
Bonnes fetes a toi,
Tartare

#4 Re : Système » plus de MAJ noyau par apt » 23-12-2022 18:53:43

tartare
hop hop hop,

bon, j'ai fait cô tu as dit: j'ai installé le linux-image-5.10.0-20-amd64 et ça fonctionne, pas de souci. Merci pour ça.
Par contre, pourrais tu m'expliquer pourquoi lors de mon premier


apt update
apt upgrade
 


il n'a pas installé le fichier?

Il me semble que j'ai toujours procédé de la sorte, c'est a dire qu'a chaque MAJ (update puis upgrade) si la  MAJ du noyau etait proposée, elle s'effectuait normalement avec la MAJ de tous les autres paquets (je n'avais pas besoin de l'installer par apt install).

Merci a toi et passe(z) de bonnes fetes.
Tartare.

#5 Re : Système » plus de MAJ noyau par apt » 19-12-2022 09:44:11

tartare
slt,

les retours consoles des commandes


apt-cache policy linux-image-5.10.0-20-amd64
linux-image-5.10.0-20-amd64:
  Installé : (aucun)
  Candidat : 5.10.158-2
 Table de version :
     5.10.158-2 500
        500 [url]http://deb.debian.org/debian[/url] bullseye/main amd64 Packages
 




ls /boot/*5.10.0-20-amd64*
ls: impossible d'accéder à '/boot/*5.10.0-20-amd64*': Aucun fichier ou dossier de ce type
 




grep -q 5.10.0-20-amd64 /boot/grub/grub.cfg && echo présent || echo absent
absent
 




grep default= /boot/grub/grub.cfg
set default="${next_entry}"
   set default="0"
 



Dc non a priori, il n'a pas téléchargé la MAJ et
un nveau apt update me dit que ts les paquets st à jour.

#6 Système » plus de MAJ noyau par apt » 18-12-2022 14:15:48

tartare
Réponses : 9
Bonjour a vous,

Il y a qques temps, la MAJ de 5.0.10-18 vers 5.0.10-19 avait mis le chambard. J'etais concerné et avait décidé dc de redemarrer sous 5.0.10-18 en attendant la 5.0.10-20.
Aujourd'hui sur 1 machine secondaire, il me propose la MAJ (5.10.0-20), dc je fais et pas de souci, du coup je decide de passer ma machine principale egalement. TT a l'air de bien fonctionner seulement apres redemarrage voici le retour console de uname -a


Linux debian 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64 GNU/Linux
 



Je ne sais pas s'il a telecharge le noyau?
s'il a installé ou ou gardé au chaud pr rien n'en faire?

Qqu'un aurait il la gentillesse de me dire les etapes pr recuperer les MAJ par apt.
En vous remerciant,
tartare

#7 Re : Scripts, programmes et robots » [RESOLU] lancer tmux au demarrage avec 10 fichiers vim » 03-11-2022 13:59:00

tartare
Hello,

je donne des nouvelles
le coup des extensions .txt semble etre la solution.
Bon j'ai pas reaffecté le script en demarrage auto qd l'ordi demarre ms qd j'execute le script, il ouvre bien tous les fichiers cô je le souhaite.
dc tjs s'embeter a mettre des extensions .txt à ces fichiers.

Merci pr ton (votre) aide.

Je passe en résolu.

#8 Re : Scripts, programmes et robots » [RESOLU] lancer tmux au demarrage avec 10 fichiers vim » 21-10-2022 22:17:39

tartare
bonsoir Philou92,

Mes fichiers n'ont pas d'extension, oui, voulu? euh, non etant donné ça les ouvrait qd ils etaient sans extension...
je viens de rajouter l'extension et relancer le script, ts les fichiers se st ouverts.

Le changement de point de montage, ce n'est pas 1 erreur, c'est juste moi qui ne souhaitait pas laisser mon pseudo de compte (me suis loupé) ms je repète, pas d'erreur sur ça

Ai je essayé de lancer mon script de façon unitaire? oui, 1 session et puis 2.
Si le coup des extensions ne regle pas le probleme, je reitererai la manip unitaire

sinon il y a aussi peut etre le fait que j'execute tmux au lancement du terminal ds mon .bashrc


if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi
 



je teste les extensions qques temps et je viens te faire 1 retour,
merci de ta patience.

tartare

#9 Re : Système » [RESOLU] ecran noir impossible de demarrer sur debian 11 » 21-10-2022 07:28:15

tartare
ici pareil pr la 5.0.19, je suis repassé en 5.0.18 et je vais patienter jusqu'au correctif ou 5.0.20.
je suis avec 1 lenovoi deapad 3, gpu AMD.
le redemarrage sous 5.0.18 n'a pas posé de probleme.

#10 Re : Scripts, programmes et robots » [RESOLU] lancer tmux au demarrage avec 10 fichiers vim » 21-10-2022 06:41:13

tartare
hello,

voici le retour de la commande bash -x tmux.sh


+ sleep 5                                                                                                                                            
+ session_01=dev                                                                                                                                      
+ session_02=reseau
+ session_03=infos01
+ session_04=infos02
+ /usr/bin/tmux new-session -d -s infos02
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/Vim_aide_commandes/raccourcis_clavier'
+ /usr/bin/tmux rename-window 'RC vim'
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/java/index_projets_Java_JavaFX'
+ /usr/bin/tmux rename-window 'index Java'
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/tmux_raccourcis_clavier/raccourcis_tmux'
+ /usr/bin/tmux rename-window 'RC Tmux'
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/eclipse_raccourcis_clavier/raccourcis_clavier'
+ /usr/bin/tmux rename-window 'RC eclipse'
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/commandes_terminal_vrac'
+ /usr/bin/tmux rename-window 'cmds cons'
+ /usr/bin/tmux new-session -d -s infos01
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique01' ';' split-window -h '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique02'
+ /usr/bin/tmux rename-window GH-kp
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/utilisation_Github_CLI'
+ /usr/bin/tmux rename-window GH
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/php/symfony_commandes'
+ /usr/bin/tmux rename-window SF01
+ /usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/php/methode_squelette_application_symfony_6'
+ /usr/bin/tmux rename-window SF02
+ /usr/bin/tmux new-session -d -s dev
+ /usr/bin/tmux new-window
+ /usr/bin/tmux rename-window F02
+ /usr/bin/tmux new-session -s reseau
sessions should be nested with care, unset $TMUX to force
+ /usr/bin/tmux -2 attach-session -d
sessions should be nested with care, unset $TMUX to force
 



là, maintenant par exemple, avec ce retour d'erreur, je n'ai pas le fichier des raccourcis clavier eclipse. A la place, j'ai un ecran blanc avec en bas: 1L qui


"/media/herve/home_HDD_EXTERNE/Images/eclipse_raccourcis_clavier/raccourcis_clavier" 256L, 8319B
 



@Philou92
ben il a ete redigé sous mon compte, il est ds 1 dossier bin qui se trouve ds mon home personnel, les fichiers s'ouvrent a part, des x, 1 ou 2 mais de maniere sporadique

A quel moment mon disque externe est monté ds /media:
au demarrage de l'ordi,
Normalement le script devrait s'executer au demarrage ms en ce moment avec cette situation j'ai arreté et je le lance manuellement. (cô c'est le cas ce matin)

peut etre que c'est l'enchainement de l'ouverture des 10 fichiers..? je n'en sais rien, je vais essayer avec des sleeps entre les commandes.
Si vs avez des pistes.

Passez 1 bonne journée
tartare

[EDIT]
ben non car là, avec 1 sec entre les commandes c'est la commande
/usr/bin/tmux new-window '/usr/local/bin/vim /media/sambano/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique01' ';' split-window -h '/usr/local/bin/vim /media/sambano/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique02'

au niveau du split de droite que rien ne s'affiche, j'ai l'affichage des raccourcis eclipse
[/EDIT]

???

#11 Scripts, programmes et robots » [RESOLU] lancer tmux au demarrage avec 10 fichiers vim » 20-10-2022 15:11:51

tartare
Réponses : 6
bonjour,

voila,
j'ai 1 script qui me lance tmux
ds tmux j'ouvre 4 sessions

session 04: 1session + 5 fenetres (5 vim qui ouvrent 5 fichiers)
session 03: 1 session + 4 fenetres (4 vim qui ouvrent 4 fichiers)
session 01: 1 session + 2 fenetres (2 bash)
session 02: 1 session (1 bash)

bon, c'est pas joli car je ne sais pas faire
mon probleme c'est que le script ne trouve pas ts les fichiers vim a ouvrir
qques x il me dit que j'ai pas les permiss°
qques x, il trouve pas

bref, je vs laisse le code qui est base de chez base (ce st tjs les 2 memes commandes)


#!/bin/sh

sleep 5;

## les variables
session_01='dev'
session_02='reseau'
session_03='infos01'
session_04='infos02'

#######################################################################################################
### === SESSION 04 ===
#######################################################################################################

## creer 1 session et la
## F01
## ouvre 1 fenetre avec bash
/usr/bin/tmux new-session -d -s $session_04

## F01: raccourcis clavier de vim
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/Vim_aide_commandes/raccourcis_clavier'
/usr/bin/tmux rename-window 'RC vim'

## F02: l'index des projets Java et JavaFX
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/java/index_projets_Java_JavaFX'
/usr/bin/tmux rename-window 'index Java'

## F03: raccourcis clavier de tmux
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/tmux_raccourcis_clavier/raccourcis_tmux'
/usr/bin/tmux rename-window 'RC Tmux'

## F04: raccourcis clavier d'eclipse
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Images/eclipse_raccourcis_clavier/raccourcis_clavier'
/usr/bin/tmux rename-window 'RC eclipse'

## F05: cmds console
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/commandes_terminal_vrac'
/usr/bin/tmux rename-window 'cmds cons'

#######################################################################################################
### === SESSION 03 ===
#######################################################################################################

## creer 1 session et la
## F01
## ouvre 1 fenetre avec bash
/usr/bin/tmux new-session -d -s $session_03

## F02: 2 cas pratiques d'utilsation de GitHub
## creer 1 nvelle fenetre avec 1 fichier vim, split la fenetre, ouvre 1 autre fichier vim ds le 2° pane
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique01' \; split-window -h '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/GitHub_cas_pratique02'
/usr/bin/tmux rename-window 'GH-kp'

## F03: utilisation de GitHub
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/github/utilisation_Github_CLI'
/usr/bin/tmux rename-window 'GH'

## F04: symfony commands
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/php/symfony_commandes'
/usr/bin/tmux rename-window 'SF01'

## F05: symfony methodologie pr creer 1 projet
## ouvre 1 fenetre avec 1 fichier
/usr/bin/tmux new-window '/usr/local/bin/vim /media/herve/home_HDD_EXTERNE/Documents/php/methode_squelette_application_symfony_6'
/usr/bin/tmux rename-window 'SF02'

#######################################################################################################
### === SESSION 01 ===
#######################################################################################################

## FENETRE 01
## execute 1 nvelle session
## avec 1 nom
## avec 1 nvelle fenetre
/usr/bin/tmux new-session -d -s $session_01

## F02
## ouvre 1 nvelle fenetre avec bash
/usr/bin/tmux new-window

## renomme la fenetre
/usr/bin/tmux rename-window 'F02'

#######################################################################################################
### ===  SESSION 02 ===
#######################################################################################################

## cree 1 2° session
## avec 1 nom
## avec 1 nvelle fenetre (avec bash)
/usr/bin/tmux new-session -s $session_02
/usr/bin/tmux -2 attach-session -d

 



y'aurait il 1 moyen d'optimiser afin qu'il ouvre ts les fichiers?

ah oui et (désolé), j'ai 2 vers° de vim (1 installée par apt et l'autre compilée. est il possible d'avoir 2 fichiers .vimrc différents?)

Merci
tartare

#12 Re : Système » [RESOLU] update initramfs is disabled » 01-09-2022 19:59:34

tartare
Bonsoir,

Bon apres de nbreux tests, j'ai résolu le probleme.
probleme de comprehension qt à la construction d'1 chroot

il faut creer le point de montage (Shame on me)


  mkdir /media/chroot
  mount /dev/nvme0n1p2 /media/chroot
  mkdir -p /media/chroot/boot/efi
  mount /dev/nvme0n1p1 /media/chroot/boot/efi
  mount --bind /proc /media/chroot/proc
  mount --bind /sys /media/chroot/sys
  mount --bind /dev /media/chroot/dev

  chroot /media/chroot
 



Avec ceci, ça passe beaucoup mieux

voili, voilou,
a+ et bonne soirée
tartare

#13 Re : Système » [RESOLU] update initramfs is disabled » 12-08-2022 15:26:47

tartare
Bonjour Raleur,

T'etais deja là qd j'ai pondu les 2 scripts.
pr memoire, je denombre les operations que je fais et je te montre les commandes du chroot

- modifier les UUIDs des partitions du DDE
- modifier les PARTUUIDs des partitions du DDE
- modifier le fichier /boot/grub/grub.cfg du DDE
- modifier le fichier /etc/fstab du DDE
- modifier le fichier /etc/default/grub du DDE
- modifier le fichier /etc/initramfs-tools/conf.d/resume du DDE
- modifier le fichier /etc/default/grub du DDI
- modifier le fichier /boot/efi/EFI/debian/grub.cfg du DDE
- definir 1 nouveau GUID pr le DDE

apres je dois chrooter pr executer
- update-initramfs -c -k all
et
- update-grub /dev/nvme0n1

Les commandes pr le chroot


  echo 'preparation du chroot'
 
  mkdir /boot
  mount -o bind /dev /media/${utilisateur}/${uuid_racine_nvme0n1}/dev
  mount -o bind /sys /media/${utilisateur}/${uuid_racine_nvme0n1}/sys
  mount -o bind /proc /media/${utilisateur}/${uuid_racine_nvme0n1}/proc
  mount -o bind /opt /media/${utilisateur}/${uuid_racine_nvme0n1}/opt
  mount -o bind /usr /media/${utilisateur}/${uuid_racine_nvme0n1}/usr
  mount -o bind /run /media/${utilisateur}/${uuid_racine_nvme0n1}/run
  mount -o bind /boot /media/${utilisateur}/${uuid_racine_nvme0n1}/boot
  mount -o bind /lib /media/${utilisateur}/${uuid_racine_nvme0n1}/lib
 
  echo -e "${RED}${bold}AVERTISSEMENT: A LIRE${normal}${NC}"
  echo 'vs etes pret: ce script vient de chrooter le systeme, votre invite de commande a ete modifiee'
  echo 'puisque vs avez lance ce script depuis votre cle USB, le chemin qui etait indique ds votre invite de commande etait /media/VotreNomUtilisateur/LeNomDeVotreCle'
  echo 'maintenant votre invite de commande doit vs indiquer que vs etes tjs root mais vs etes devez etre situé a la racine de votre systeme chroote'
  echo "tapez la commande suivante pr updater l'initramfs: update-initramfs -c -k all"
  echo 'tapez la commande suivante pr updater le grub du DDI: update-grub /dev/nvme0n1'
  echo 'puis sortez du systeme chroote en tapant la commande: exit'
  echo 'le script reprendra son execution'

  chroot /media/${utilisateur}/${uuid_racine_nvme0n1}

  ## si la commande update-initramfs -c -k all
  ## renvoie 1 erreur type: initramfs disabled...
  ## essayer la commande
  ## mkinitramfs -o /boot/initrd.img-${kernel_ver}-generic ${kernel_ver}
  ## (possibilite de rajouter -c -k) (all, entraine 1 erreur)
  ## a la suite de cette commande, la commande
  ## update-grub /dev/nvme0n1
  ## ne trouve qu'1 seule image linux au lieu de 2
 
  echo 'on demonte proc, sys, dev, opt, usr, run, boot, lib du DDI'
 



Je pense aussi que media designe le support qui a servi a demarrer le systeme live. Dans ce cas, il s'agit de la cle USB clonezilla.
Comme apres le clonage, je vais directement ds le shell clonezilla pr executer le script, je ne comprends pas le message d'erreur

des infos:
- le systeme live ne possede pas de rep /boot, il faut le creer avant de chrooter
je viens de l'ajouter au script (2° ligne, cela n'a rien changé au message)

- le rep /run/live/medium du chroot est vide

- le rep /run/live/medium du systeme live clonezilla contient
    - amd64-release.txt
    - boot (est 1 rep)
    - Clonezilla-Live-Version (vide)
    - EFI (est 1 rep)
    - GPL (vide)
    - live (est 1 rep)
    - syslinux (est 1 rep)
    - utils (est 1 rep)

- si j'execute la commande update-initramfs -c -k all ds le systeme live (celui qui n'est pas chrooté), retourne
update-initramfs is disabled (live-system is running on read-only media)

non il n'y a pas de paquets live-* installés. Comme le cas precedent (avec les disques durs mecaniques, je fais sur 1 ordinateur vierge et avec 1 install de base (sans meme de connection internet))

Voilà,
Si tu as des pistes, n'hesite pas

PS: cette histoire de creer 1 rep /boot vide me turlupine, ms peut etre qu'apres le chroot, il  n'est plus vide, je n'ai pas verifié.

#14 Système » [RESOLU] update initramfs is disabled » 12-08-2022 08:21:45

tartare
Réponses : 5
Bonjour a vous,

Il y a qques temps, j'ai fait 2 scripts (clonage/restauration de disques durs avec clonezilla).
Les 2 scripts fonctionnent avec des disques dur mecaniques (et 1 ordinateur plutot ancien).

- avec 1 autre ordinateur (+ recent) et 2 SSD (1 interne, 1 externe USB)
- avec le script de clonage,
j'ai 1 erreur lorsque je lance la commande (ds 1 chroot)
update-initramfs -c -k all

il me renvoie l'erreur:
update-initramfs is disabled (live system is running without media mounted on /run/live/medium)
Je comprends le sens de l'erreur ms pas pourquoi elle se produit ni comment reparer.

Je ne sais pas à quoi se refere le mot "media"
est-ce:
- un media quelconque type cle USB live?
- le repertoire /media

je ne sais pas si le Bios pourrait etre la cause, la table de partition ou autre... bref je ne sais pas ou regarder

j'execute le script depuis 1 console clonezilla juste apres le clonage.

Si vs avez besoin de retour pr m'aider a fixer l'erreur, n'hesitez pas.
Merci a vous
tartare

#15 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 16-02-2022 22:51:34

tartare
re,

bon je ne px pas alléger + car après ça n'a plus de sens
tjs 3 fichiers


#!/usr/bin/python3.9
# -*- coding: utf-8 -*-

import tkinter as tk
import fichier_F01R_copie

class FP(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.creer_widgets()

    def creer_F01R(self):
        F01R= fichier_F01R_copie.classe_F01R(self)

    def creer_widgets(self):
        self.btn19= tk.Button(self, text= "F01R: 1 btn personnalisé", command= self.creer_F01R)
        self.btn19.grid(column= 0, row= 18, padx= 5, pady= 5, sticky= "nw")

if __name__ == "__main__":
    FP= FP()
    FP.mainloop()
 




#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk
import fichier_Btn_Retour_Personnalise_copie

class classe_F01R(tk.Toplevel):
    def __init__(self, parent):
        super().__init__()
        self.parent= parent
        self.creer_Widgets()

    def on_close(self):
        self.destroy()

    def creer_Widgets(self):

        self.cadre01= tk.Frame(self, bg= "blue")
        self.cadre01.grid(column= 0, row= 0)
        self.btn01_retour= tk.Button(self.cadre01, text= "retour", command= self.on_close)
        self.btn01_retour.grid(column= 0, row= 0)

        ## instance du bouton située ds la fenetre secondaire, ds le fr bleu
        self.btn02_retour= fichier_Btn_Retour_Personnalise_copie.Btn_retour(self.cadre01, "detruire Fr bleu", 0, 1)
 




#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk

class Btn_retour():
    def __init__(self, parent, libelle, grid_column, grid_row):
        self.parent= parent
        self.libelle= libelle
        self.grid_column= grid_column
        self.grid_row= grid_row

        ## initialisat° du widget
       
        self.btn_retour= tk.Button(self.parent, text= self.libelle, command= self.f1)
        self.btn_retour.grid(column= self.grid_column, row= self.grid_row)

    def f1(self):
        ## print("bjour")
        ##self.destroy()    ## AttributeError, le btn n'a pas
                            ## d'attribut destroy()

        ##self.destroy(self)    ## AttributeError, le btn n'a pas
                                ## d'attribut destroy()

        self.parent.destroy() ## fonctionne ms detruit le Frame, ms je vx detruire la fenetre
       
        ##self.toplevel.destroy()   ## AttributeError, le btn n'a pas
                                    ## d'attribut toplevel

        ##toplevel.destroy()    ## NameError, le nom toplevel
                                ## n'est pas defini

        ##self.parent.toplevel.destroy()    ## AttributeError, Frame n'a pas
                                        ## d'attribut toplevel

        ##self.parent.destroy()   ## AttributeError, le btn n'a pas
                                  ## d'attribut parent


 



David5647:

des écritures peu compréhensibles (self.fr01.cnv01.fr01.btn01= tk.Button(self.fr01.cnv01.fr01,...)


ben c'est du ciblage
self= fenetre
fr01= Frame ds la fenetre
cnv01= Canvas ds le Frame
fr01= Frame ds le Canvas
btn01= Button ds le Frame

ca fait beaucoup de niveaux c'est vrai, ms a part tout poser sur la fenetre... je vois pas comment faire.
Tu fais comment toi?

David5647:

des écritures confuses (self.btn01_retour est un bouton, self.btn02_retour n'est pas un bouton)


si tu fais ref a la derniere L du 2° fichier ben... si c'est un bouton, c'est le bouton personnalisé, celui defini ds le 3° fichier

le bouton fait bien ce que je lui demande, detruire le Frame bleu (c'est pr cela qu'il est encore en vie celui-là), ms je vx lui dire de fermer la fenetre, pas de détruire le Frame bleu

Tt laisser ds 1 seul fichier? ben si tu trouves que c'est brouillon avec 3 fichiers, imagine le tt ds 1 seul... et puis là c'est un truc simple
bref je souhaite garder mes 3 fichiers

je te donne raison sur tt le reste (meme si on ne fait pas la compet). Y avait effectivement bcp de bling bling restant ds ce que j'avais écrit et bcp de commentaires (j'ai souvenir que les femmes adorent ms je me rends compte que je suis dvt mon ecran, dc effectivement ca ne sert pas a grd chose)

bon là je ferai pas mx.
si tu ne px pas c'est pas bien grave, je resoudrai bien tôt ou tard.

a+ et bonne soirée.
tartare

#16 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 16-02-2022 11:45:54

tartare
re,

En fait
j'ai oublié de te mettre le fichier FP_copie.py, celui qui a le mainloop() pr que tu puisses
creer 3 fichiers
executer FP_copie.py qui lancera les 2 autres


#!/usr/bin/python3.9
# -*- coding: utf-8 -*-


import tkinter as tk
from sys import version_info
import fichier_F01R_copie


class FP(tk.Tk):    ## on cree notre applicat° en tant que classe
                    ## qui hérite de la classe tk.Tk

    ## constructeur
    def __init__(self):

        tk.Tk.__init__(self) ## on appelle le constructeur
                             ## de la classe mère pr instancier
                             ## la fenetre Tk ds la variable self.
                             ## super().__init__() est 1
                             ## constructeur identique

        ## appel de la méthode pr initialiser les widgets de la fenetre
        ## l'invocat° de la méthode doit-etre ecrite à la tte fin du
        ## constructeur.
        ## si on invoque la méthode qui initialise les widgets (et dc les
        ## variables qui y st rattachées (comme les variables de ctrl)
        ## AVT la déclarat° de ces variables, alors le programme sort
        ## 1 AttributeError
        self.creer_widgets()

    ## LES methodes

    ## les methodes qui instancient chacune des fenetres

    def creer_F01R(self):
        F01R= fichier_F01R_copie.classe_F01R(self, "F01R")

    ## méthode qui initialise les widgets de la fenetre
    def creer_widgets(self):
       
        ##-----------------------------------------------------------

        ## creat° d'1 1° Frame de fond rouge
        ## ds la fenetre (désignée par "self"
        self.fr01= tk.Frame(self,
                               width= 600,
                               height= 600,
                               padx= 5,
                               pady= 5,
                               bg= "red")

        self.fr01.grid(column= 0,
                          row= 0,
                          padx= 5,
                          pady= 5,
                          sticky= "nw")

        ##-----------------------------------------------------------

        ## creat° d'1 Canvas ds le Frame self.fr01
        ## les dimens° du contenu (ici le Canvas)
        ## prennent le pas sur les dimens° du conteneur
        ## (ici le Frame self.fr01), sauf si le conteneur
        ## dispose de la methode grid_propagate()
        self.fr01.cnv01= tk.Canvas(self.fr01,
                               scrollregion= (0, 0, 1000, 1000),
                               width= 350,
                               height= 500,
                               bd= 1,
                               highlightbackground= "black",
                               bg= "ivory")

        self.fr01.cnv01.grid(column= 0,
                             row= 0,
                             padx= 5,
                             pady= 5,
                             sticky= "nsew")

        ##-----------------------------------------------------------

        ## creat° d'1 Scrollbar verticale a cote (droite)
        ## du Canvas, les 2 widgets st au meme niveau
        ## ds self.fr01
        self.fr01.ysb01= tk.Scrollbar(self.fr01,
                                      orient= "vertical",
                                      command= self.fr01.cnv01.yview)

        self.fr01.ysb01.grid(column= 1,
                             row= 0,
                             padx= 5,
                             pady= 5,
                             sticky= "ns")
       
        ## appairage du Canvas (self.fr01_cnv01)
        ## avec
        ## la Scrollbar (self.fr01_ysb01)
        self.fr01.cnv01.config(yscrollcommand= self.fr01.ysb01.set)

        ##-----------------------------------------------------------
       
        ## creat° d'1 Frame qui sera placé ds le Canvas
        ## grâce à la méthode create_window au-dessous
        self.fr01.cnv01.fr01= tk.Frame(self.fr01.cnv01,
                                      width= 4000,
                                      height= 600,
                                      padx= 5,
                                      pady=5,
                                      bg= "green",
                                      bd= 1)

        ## methode create_window du Canvas
        ## methode qui reçoit la nvelle Frame (crée au-dessus)
        ## ds on attribut "window"
        ## les prochains widgets crées st à placer ds le Frame
        ## contenu ds le Canvas
        self.fr01.cnv01.win01= self.fr01.cnv01.create_window(
                                    5,
                                    5,
                                    anchor= "nw",
                                    window= self.fr01.cnv01.fr01)

        ##-----------------------------------------------------------
       
        ## créat° de boutons ds le Frame contenu ds le Canvas
        self.fr01.cnv01.fr01.btn01= tk.Button(self.fr01.cnv01.fr01,
                                               text= "Quitter",
                                               padx= 5,
                                               pady= 5,
                                               command=self.quit)

        self.fr01.cnv01.fr01.btn01.grid(column= 0,
                           row= 0,
                           padx= 5,
                           pady= 5,
                           sticky= "nw")

        ##-----------------------------------------------------------

        self.fr01.cnv01.fr01.btn19= tk.Button(self.fr01.cnv01.fr01,
                                              text= "F01R: 1 btn personnalisé",
                                              padx= 5,
                                              pady= 5,
                                              command= self.creer_F01R)

        self.fr01.cnv01.fr01.btn19.grid(column= 0,
                                        row= 18,
                                        padx= 5,
                                        pady= 5,
                                        sticky= "nw")

        self.fr01.cnv01.fr01.btn19A= tk.Button(
            self.fr01.cnv01.fr01,
            text= "infos",
            padx= 5,
            pady= 5,
            command= lambda: self.update_explication(self.liste_explication[0]))

        self.fr01.cnv01.fr01.btn19A.grid(column= 1,
                                        row= 18,
                                        padx= 5,
                                        pady= 5,
                                        sticky= "nw")

        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
       
        ## creat° d'1 3° Frame de fond ivoire
        ## ds la fenetre (désignée par "self")
        self.fr03= tk.Frame(self,
                               width= 600,
                               height= 600,
                               padx= 5,
                               pady= 5,
                               bg= "ivory")

        self.fr03.grid(column= 2,
                          row= 0,
                          padx= 5,
                          pady= 5,
                          sticky= "nw")

        ##-----------------------------------------------------------
       
        ## creat° d'1 Canvas ds le Frame self.fr03
        ## les dimens° du contenu (ici le Canvas)
        ## prennent le pas sur les dimens° du conteneur
        ## (ici le Frame self.fr03), sauf si le conteneur
        ## dispose de la methode grid_propagate()
        self.fr03.cnv01= tk.Canvas(self.fr03,
                               scrollregion= (0, 0, 1000, 1000),
                               width= 700,
                               height= 500,
                               bd= 1,
                               highlightbackground= "blue",
                               bg= "ivory")

        self.fr03.cnv01.grid(column= 0,
                             row= 0,
                             padx= 5,
                             pady= 5,
                             sticky= "nsew")

        ##-----------------------------------------------------------

        ## creat° d'1 Scrollbar verticale a cote (droite)
        ## du Canvas, les 2 widgets st au meme niveau
        ## ds self.fr03
        self.fr03.ysb01= tk.Scrollbar(self.fr03,
                                      orient= "vertical",
                                      command= self.fr03.cnv01.yview)

        self.fr03.ysb01.grid(column= 1,
                             row= 0,
                             padx= 5,
                             pady= 5,
                             sticky= "ns")
       
        ## appairage du Canvas (self.fr03_cnv01)
        ## avec
        ## la Scrollbar (self.fr03_ysb01)
        self.fr03.cnv01.config(yscrollcommand= self.fr03.ysb01.set)

        ##-----------------------------------------------------------
       
        ## creat° d'1 Frame qui sera placé ds le Canvas
        ## grâce à la méthode create_window au-dessous
        self.fr03.cnv01.fr01= tk.Frame(self.fr03.cnv01,
                                      width= 4000,
                                      height= 600,
                                      padx= 5,
                                      pady=5,
                                      bg= "ivory",
                                      bd= 1)

        ## methode create_window du Canvas
        ## methode qui reçoit la nvelle Frame (crée au-dessus)
        ## ds on attribut "window"
        ## les prochains widgets crées st à placer ds le Frame
        ## contenu ds le Canvas
        self.fr03.cnv01.win01= self.fr03.cnv01.create_window(
                                    5,
                                    5,
                                    anchor= "nw",
                                    window= self.fr03.cnv01.fr01)

        ##-----------------------------------------------------------

        ## creat° d'1 lbl qui explique le fonctionnement des
        ## differents fichiers
        self.fr03.cnv01.fr01.lbl_explication= tk.Label(self.fr03.cnv01.fr01,
                                        text= "comment fctionne la FP",
                                        padx= 5,
                                        pady= 5,
                                        justify= "left")

        self.fr03.cnv01.fr01.lbl_explication.grid(column= 0,
                                                  row= 0,
                                                  padx= 5,
                                                  pady= 5,
                                                  sticky= "nw")

        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
       
        ## creat° d'1 2° Frame directement ds la FP, juste au-dessous
        ## du 1° Frame (celui de couleur de fond rouge)
        self.fr02= tk.Frame(self,
                            width =200,
                            height= 200,
                            padx= 5,
                            pady= 5,
                            bg= "green",
                            bd= 1)

        self.fr02.grid(column= 0,
                       row= 1,
                       padx= 5,
                       pady= 5,
                       sticky= "nw")

        ##-----------------------------------------------------------
       
        ## créat° de boutons ds le 2° Frame contenu ds FP
        self.fr02.btn01= tk.Button(self.fr02,
                                               text= "Quitter",
                                               padx= 5,
                                               pady= 5,
                                               command=self.quit)

        self.fr02.btn01.grid(column= 0,
                           row= 0,
                           padx= 5,
                           pady= 5,
                           sticky= "nw")

        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
       
        self.liste_explication= [
            "F01R"]
        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
        ##-----------------------------------------------------------
       
        ## creer 1 instance de la classe Btn_retour définie ds
        ## le fichier de classe
        ## /home/laurent/Documents/python/test14/fichier_Btn_Retour_Personnalise.py
        ## son conteneur, la colonne, la ligne, le padx, le pady
        ## self.btn02_retour= fichier_Btn_Retour_Personnalise.Btn_retour(self.parent, "quitter le prog", 5, 5, 1, 0, 5, 5, "nw")

####################################################################
####################################################################

if __name__ == "__main__":
   
    ## creat° de la fenetre
    FP= FP()

    ## definit° des attributs de la fenetre

    ## titre de la barre de titre
    FP.title("Fenetre Principale (FP)")

    ## fenetre en plein ecran, enleve la barre de titre
    FP.wm_attributes("-fullscreen", "True")

    ##
    FP.mainloop()
 

#17 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 16-02-2022 11:31:21

tartare
Bjour a vous tous, toutes,

@David5647,

Désolé de ne pas avoir répondu plus tôt.
J'ai eu qques obligations ces 2 dernières semaines
+
je (re)decouvre la prog, je vois plein de trucs nveaux et cô je suis du genre a courir plusieurs lapins a la x, je me perds rapidement.
+
il a fallu que je ré ecrive tt ce que j'avais deja fait (pr 1 code + propre)

bref, tt ça pr te dire que j'ai pas creusé la chose

j'ai fait un code + minimal

je poste 2 fichiers, le fichier principal, celui qui a la mainloop() n'est pas interessant

le fichier qui importe le fichier du bouton personnalisé c'est a dire
fichier_F01R_copie.py
qui importe
fichier_Btn_Retour_Personnalise_copie.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-


import tkinter as tk
import fichier_Btn_Retour_Personnalise_copie

## Déclarat° de la classe
class classe_F01R(tk.Toplevel):

    def __init__(self, parent, titre):

        super().__init__()  ## si la classe herite de tk.Tk
                            ## (2L au-dessus)
                            ## ce constructeur de super()
                            ## permet la creat° de la fenetre
                            ## ms celle-ci a 1 vie propre

        ## appairage des attributs d'instance
        ## et
        ## des parametres du constructeur
        self.parent= parent
        self.titre= titre

        ## iconifie la fenetre parente c-a-d FP
        self.parent.withdraw()

        ## definit° des attributs d'instance
        self.title(self.titre)

        ## permet le plein ecran de la fenetre
        self.width= self.winfo_screenwidth()
        self.height= self.winfo_screenheight()
        self.geometry(str(self.width) + "x" + str(self.height))

        ## appel de la méthode pr initialiser les widgets de la fenetre
        ## l'invocat° de la méthode doit-etre ecrite à la tte fin du
        ## constructeur.
        ## si on invoque la méthode qui initialise les widgets (et dc les
        ## variables qui y st rattachées (comme les variables de ctrl)
        ## AVT la déclarat° de ces variables, alors le programme sort
        ## 1 AttributeError
        self.creer_Widgets()

    ## methode
    def on_close(self):

        self.destroy()
        self.parent.deiconify()

    ## methode qui initialise les widgets de la fenetre
    def creer_Widgets(self):

        ## créat° d'au moins 1 widget invisible de type Frame
        self.cadre01= tk.Frame(self,
                               width= 300,
                               height= 500,
                               padx= 5,
                               pady= 5,
                               bg= "blue",
                               bd= 1)

        self.cadre01.grid(column= 0,
                          row= 0,
                          padx= 5,
                          pady= 5,
                          sticky= "nw")

        self.cadre01.grid_propagate(False)

        ## 1° L du Frame
        ## widget Btn + son positionnement
        ## appel de la méthode on_close() au clic btn
        ## bouton retour: ferme et fait apparaitre FP
        self.btn01_retour= tk.Button(self.cadre01,
                                     text= "retour",
                                     padx= 5,
                                     pady= 5,
                                     command= self.on_close)

        self.btn01_retour.grid(column= 0,
                               row= 0,
                               padx= 5,
                               pady= 5,
                               sticky= "nw")

        ## creer 1 instance de la classe Btn_retour définie ds
        ## le fichier de classe
        ## /home/laurent/Documents/python/test14/fichier_Btn_Retour_Personnalise.py
        ## les arguments sont définis ds le fichier
        ## les arguments propres au bouton st:
        ## son conteneur, son libellé, son padx, son pady
        ## les arguments propres au grid() st:
        ## sa colonne, sa ligne, son padx, son pady, son sticky

        ## instance située ds la fenetre secondaire, ds le fr bleu
        self.btn02_retour= fichier_Btn_Retour_Personnalise_copie.Btn_retour(self.cadre01,
                                                                            "detruire Fr bleu",
                                                                            5,
                                                                            5,
                                                                            1,
                                                                            0,
                                                                            5,
                                                                            5,
                                                                            "nw")

        ## 1 2° Frame a droite du 1°
        self.cadre02= tk.Frame(self,
                               width= 500,
                               height= 500,
                               padx= 5,
                               pady= 5,
                               bg= "ivory",
                               bd= 1)

        self.cadre02.grid(column= 1,
                          row= 0,
                          padx= 5,
                          pady= 5,
                          sticky= "nw")
 



le fichier du bouton personnalisé importé c'est a dire
fichier_Btn_Retour_Personnalise_copie.py
importé ds le fichier
fichier_F01R_copie.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-


import tkinter as tk

## Déclarat° de la classe
class Btn_retour():

    ## déclarat° du constructeur
    def __init__(self,
                 oM,
                 libelle,
                 padx,
                 pady,
                 grid_column,
                 grid_row,
                 grid_padx,
                 grid_pady,
                 grid_sticky):
       
        ## déclarat°, initialisat° des attributs d'instance
        ## correspondance avec les parametres du constructeur
        ## les attributs d'instance st propres a chaque instance
        ## ce st des attributs stockant les parametres reçus

        self.oM= oM ## indique ou va se situer l'instance du bouton
        self.libelle= libelle
        self.padx= padx,
        self.pady= pady,
        self.grid_column= grid_column
        self.grid_row= grid_row
        self.grid_padx= grid_padx
        self.grid_pady= grid_pady
        self.grid_sticky= grid_sticky

        ## initialisat° du widget
       
        self.btn_retour= tk.Button(self.oM,
                                   text= self.libelle,
                                   padx= self.padx,
                                   pady= self.pady,
                                   command= self.f1)
   
        self.btn_retour.grid(column= self.grid_column,
                             row= self.grid_row,
                             padx= self.grid_padx,
                             pady= self.grid_pady,
                             sticky= self.grid_sticky)

    ## méthodes de classe

    def f1(self):

        ## print("bjour")
        ##self.destroy()    ## AttributeError, le btn n'a pas
                            ## d'attribut destroy()

        ##self.destroy(self)    ## AttributeError, le btn n'a pas
                                ## d'attribut destroy()

        self.oM.destroy() ## fonctionne ms detruit le Frame
       
        ##self.toplevel.destroy()   ## AttributeError, le btn n'a pas
                                    ## d'attribut toplevel

        ##toplevel.destroy()    ## NameError, le nom toplevel
                                ## n'est pas defini

        ##self.oM.toplevel.destroy()    ## AttributeError, Frame n'a pas
                                        ## d'attribut toplevel

        ##self.parent.destroy()   ## AttributeError, le btn n'a pas
                                  ## d'attribut parent
 



dc, pr en revenir au sujet de ce post,
ds le 1° fichier, j'instancie la classe definie de mon second fichier
c'est a dire
je crée un bouton personnalisé (dt le libellé est: "detruire fr bleu")

ce bouton détruit bien le frame bleu,
hors ce que je souhaite et n'arrive pas a faire c'est détruire la fenetre et faire apparaitre la fenetre principale (celle qui a le mainloop())
j'ai dc 3 niveaux
le fichier de la fenetre principale (mainloop())
---> le fichier de la fenetre secondaire (avec le fr bleu et a l'interieur de ce fr bleu mon bouton_personnalisé)
-------> le fichier de mon bouton personnalisé

voilà,
sinon pr tes remarques:
- forums specifiques: j'y suis aussi ms je me suis fait rembarré (sans doute est-ce ma faute ms comme j'avais pris le temps d'ecrire un code clair et commenté, je l'ai mal pris, j'y retrounerai sans aucun doute car je me rends bien compte qu'ici le sujet du site n'est ni python, ni la prog.
D'ailleurs apres ce post, je pense arreter de poster de tels sujets ici

- tu as remarqué que j'avais pris le temps de détailler, ça fait plaisir (deja dit ms mes efforts st passés inaperçus ou insuffisants ailleurs)

- variables globales, j'essayais justement de ne pas en utiliser, faut que je revoie ma copie sur le sujet(?!)

voili, voilou,
Merci bien pr le temps que tu passes à me lire et surtt a me filer un coup de main.
a+ et bonne journée
tartare

#18 Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 01-02-2022 17:08:06

tartare
Réponses : 6
Bonjour a vous,

je rencontre un souci (encore?) pr arriver à cibler 1 widget ou 1 fenetre depuis 1 emplacement exterieur a cette fenetre
j'explique et je montre.
3 fichiers .py

le 1° est le fichier principal, celui qui contient le mainloop()
voici ce qui d'après moi compte


import tkinter as tk
import fichier_Fenetre_Avec_Button_Personnalise

FP= tk.Tk()
FP.geometry("1000x700+300+0")
FP.minsize(410, 200)
FP.maxsize(1100, 700)
FP.title("FP - accueil")

## methode qui appelle le fichier fichier_Fenetre_Button_Personnalise
def creer_Fenetre_Button_Personnalise():
    F01K= fichier_Fenetre_Avec_Button_Personnalise.creer_Fenetre_Avec_Button_Personnalise(FP,
                                                                                "F01K: ",
                                                                                600,
                                                                                400)
 


bien, là, on voit que
-1 je n'utilise pas de classe pr définir ma FP (Fenetre Principale, celle qui contient le mainloop())
ça va changer
-2 je crée 1 instance d'une seconde fenetre grâce à la méthode et à l'importation de mon second fichier

le second fichier, celui qui crée ma seconde fenêtre


import tkinter as tk
import fichier_Btn_Retour_Personnalise

class creer_Fenetre_Avec_Button_Personnalise():
    ## déclarat° du constructeur
    def __init__(self, FP, titre, largeur, hauteur):
        ## déclarat°, initialisat° des attributs d'instance
        self.FP= FP
        self.titre= titre
        self.largeur= largeur
        self.hauteur= hauteur

        ## initialisat° de la fenetre
        self.F01K= tk.Toplevel(self.FP)
        self.F01K.title(self.titre)
        self.F01K.geometry(str(self.largeur) + "x" + str(self.hauteur))
        self.F01K.wm_attributes("-zoomed", 1)

        ## créat° d' 1 Frame
        self.cadre01= tk.Frame(self.F01K, width= 300, height= 500, padx= 5, pady= 5, bg= "blue", bd= 1)
        self.cadre01.grid(column= 0, row= 0, padx= 10, pady= 10, sticky= tk.N + tk.W)
        self.cadre01.grid_propagate(False)

        ## creer 1 instance de la classe Btn_retour définie ds son fichier de classe
        self.btn02_retour= fichier_Btn_Retour_Personnalise.Btn_retour(self.cadre01, "detruire Frame bleu", 5, 5, 1, 0, 10, 10, "nw")
 


bien, là on voit que
-1 j'utilise 1 classe pr construire ma fenetre ms qu'elle n' herite de rien
-2 derniere L: je crée 1 instance d'un bouton grâce au fichier que j'importe ET que ce bouton est crée DANS le Frame de la fenetre

le 3° fichier, celui qui crée un bouton personnalisé


import tkinter as tk

## Déclarat° de la classe
class Btn_retour():
    ## déclarat° du constructeur
    def __init__(self, oM, libelle, padx, pady, grid_column, grid_row, grid_padx, grid_pady, grid_sticky):

        ## déclarat°, initialisat° des attributs d'instance
        self.oM= oM
        self.libelle= libelle
        self.padx= padx,
        self.pady= pady,
        self.grid_column= grid_column
        self.grid_row= grid_row
        self.grid_padx= grid_padx
        self.grid_pady= grid_pady
        self.grid_sticky= grid_sticky

        ## initialisat° du widget
        self.btn_retour= tk.Button(self.oM, text= self.libelle, padx= self.padx, pady= self.pady, command= self.f1)
        self.btn_retour.grid(column= self.grid_column, row= self.grid_row, padx= self.grid_padx, pady= self.grid_pady, sticky= self.grid_sticky)

    def f1(self):
        ## print("bjour")
        ##self.destroy()
        ##self.destroy(self)
        self.oM.destroy() ## fonctionne ms detruit le Frame
        ##self.toplevel.destroy()
        ##toplevel.destroy()
        ##self.oM.toplevel.destroy()
 


bien là on voit que
-1 je crée 1 classe qui crée 1 bouton personnalisé (personnalisable) ms qui encore 1x n' hérite de rien
-2 lorsque je clic sur le bouton, celui-ci détruit le Frame qui le contient (Frame du second fichier et donc de la seconde fenetre)

hors je ne veux pas détruire le Frame de la seconde fenetre, je veux détruire la seconde fenetre.
Comment je fais cela?
Avec ce que j'ai écrit, je ne px pas cibler cette seconde fenetre

je vois 2 manières de faire.
- ecrire la fonction qui detruit la fenetre directement ds son propre fichier (le second dc) et voir si mon bouton personnalisé peut appeller cette méthode
- faire appel a qque chose que je ne connais pas encore et que je n'arrive pas a traduire en langage humain et dc que je n'utilise pas


class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
 


vu ici
docs.python.org/fr/3.8/library/tkinter.html
Ds ce dernier morceau de code
je vois bien que la classe Application hérite de la classe Frame
je vois bien qu'il y a 2 constructeurs, celui de la classe Application, celui de la classe .........super()? mère? la classe Frame?
qu'est ce que le master?
leur code est un fichier applicat° (avec le mainloop)
ma structure fait appel a différents fichiers, comment je dois l'adapter?
dc... si vs avez des pistes et/des explications

En vs remerciant
tartare

#19 Re : Scripts, programmes et robots » [RESOLU] python: installer zeal » 31-01-2022 09:44:53

tartare
re,

bon ben [RESOLU],

Merci a vs 2 pr les procédures
j'ai cloné le git ms je parie que le wget fonctionne tt aussi bien.

a+ et bon lundi
tartare

#20 Scripts, programmes et robots » [RESOLU] python: installer zeal » 26-01-2022 19:12:36

tartare
Réponses : 3
Bonsoir,

1 quest° simple ce soir (parce que je suis fatigué)

comment installer zeal
https://zealdocs.org/download.html#linux

sur bullseye.
apriori le paquet ne se trouve pas ds les dépôts

Bonne soirée a vous
tartare

#21 Re : Scripts, programmes et robots » [RESOLU] python: variable de controle IntVar set() et get() » 25-01-2022 08:35:05

tartare
Bjour,

voici le bout de code

le IntVar


self.v_Int_Var= tk.IntVar(self.fenetre)
 



le bouton auquel on assigne une fonct° (sans argument)


self.btn_hasard= tk.Button(self.fenetre, text="nvelle valeur", padx= 5, pady= 5, command= self.attribuer_Nvelle_Valeur)
 



le label avec son attribut textvariable qui prend la valeur du IntVar


self.label= tk.Label(self.fenetre, text= "vide par defaut", padx= 5, pady= 5, textvariable= self.v_Int_Var)
 



la fonct° que je définis


def attribuer_Nvelle_Valeur(self):
self.v_Int_Var.set(random.randint(1000, 2000))
print(self.v_Int_Var.get())
 



dc en fait, le Label avec son attribut textvariable est constamment a l'ecoute et se met a jour automatiquement au clic bouton.
Pas besoin de creer un evenement (Event).
si on veut recuperer la valeur pr utilisat° avec un autre widget, on utilise la methode get() du IntVar (ce que je vais essayer de ce pas)

En ce qui concerne les bouts de code que tu donnes,
c'est une réassignation de valeur à une variable
ds le 1° cas
my_var= 1 liste (ou 1 tableau(je ne connais pas encore la difference, ms vs parlez bcp + de listes que de tableaux (ds les "tutos" que je lis)))
puis my_var devient 1 entier

ton 2° code (qui est le mien), ben c'est la meme chose
le truc, c'est que lorsqu'on définit un IntVar (ou StringVar) comme je le fais, il y a assignat° de valeur par défaut (0 pr le IntVar, et 1 chaine vide pr le StringVar)

oui oui la methode de nlancien fonctionne (j'ai constaté qd je me suis battu avec le IntVar).
d'ailleurs tu dois pvoir faire une condit° de verif là aussi?
si l'attribut text du bouton devient CECI, alors il se passe ça

j'ai passé le sujet en [RESOLU]

Evidemment, vs pvez vs attendre à ce que je revienne avec d'autres ques... (problemes)
Merci bien
tartare

#22 Re : Scripts, programmes et robots » [RESOLU] python: variable de controle IntVar set() et get() » 24-01-2022 21:41:33

tartare
re,

@David5647,
tu m'as donné la réponse
j'utilisais pas le set

@nlancien
non non, je ne parle pas de l'attribut text du Label ms bien de son attribut textvariable


pfff python me prend a la gorge...

merci a ts les 2 d'avoir été là.
passez une bonne soirée.
tartare

#23 Scripts, programmes et robots » [RESOLU] python: variable de controle IntVar set() et get() » 24-01-2022 16:51:17

tartare
Réponses : 5
Bjour,

je n'arrive pas a comprendre, utiliser les variables de controle, ni ses methodes set() et get()

j'ai 1 fenetre avec un Button qui doit mettre a jour un Label grace à une fonction

mon IntVar


self.v_Int_Var= tk.Intvar(self.fenetre)
 



mon Button


self.btn_01= tk.Button(xxx, xxx, xxx, xxx, command= self.attribuer_Nvelle_Valeur)
 



mon Label


self.lbl_01= tk.Label(xxx, xxx, xxx, textvariable= self.v_Int_Var)
 



ma fonction


def attribuer_Nvelle_Valeur(self):
   self.v_Int_Var= random.randint(1000, 2000)
   print(self.v_Int_Var)
 



imprime ce qu'il faut ds la console

ms comment mettre a jour le textvariable de self.lbl_01?

En vous remerciant
tartare

#24 Re : Scripts, programmes et robots » [INFO] [RESOLU] Python: trouver un index des objets et methodes » 20-01-2022 10:57:30

tartare
re,

il y a ceci egalement que je viens de decouvrir

a taper ds la console:
python3 -m pydoc -b

ca vs lance un serveur "ephemere" (qui sera detruit lorsque vs taperez "q" ds la console) et qui vs liste vos modules, librairies, packages installés chez vs

#25 Re : Scripts, programmes et robots » [INFO] [RESOLU] Python: trouver un index des objets et methodes » 18-01-2022 18:09:44

tartare
bonsoir,

cyrille
Donc oui à part une  recherche personnnelle, je ne connais pas d'autres moyens, généralment un doc est disponible sur le site éponyme.


bien bien,
c'est dc bien l'idée de la recherche sur d'autres sites qui prime.

nlancien
Pas spécifique a python, a mon humble avis.


sans doute ms comme je me suis attelé à python...

nlancien
Le reste n'est pas des paquets officiels.. Donc pas de raison d'y trouver la doc.


ça rejoint l'idée de la recherche ailleurs

nlancien
Pour Label, c'est dans la doc officielle, chez tkinter.



nlancien
Event vient de tkinter aussi. Pas envie de chercher.


ok j'ai mis ca un peu au pif poil (c'etait + pr exprimer mon idée)

David5647 plussoie le fait cité au-dessus

David5647
Je suppose que lorsque tu dit "label" et "event" tu parles du module tkinter


ouais, là aussi c'est pr illustrer l'idée.

je mets en Resolu avec un tag supplémentaire: Info (car c'etait le sujet et non pas la resolution d'un pble technique)
etlk, merci pr les infos et les liens.

tartare

Pied de page des forums

Propulsé par FluxBB