bonjour,
Est-il possible d'afficher en permanence dans un scrolledtext un fichier .txt daté ?
connaissez-vous un moyen pour faire un rafraichissement des données reçues sur ce fichier toutes les X secondes ?
Demande d'aide Tkinter
Modérateur : Francois
Re: Demande d'aide Tkinter
Salut,
normalement je pense que c'est possible, mais il faudrait que je vois ton code pour mieux t’aiguiller
normalement je pense que c'est possible, mais il faudrait que je vois ton code pour mieux t’aiguiller
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Re: Demande d'aide Tkinter
Code : Tout sélectionner
# !/usr/bin/python3
# -*- coding: utf8 -*-
import os
import glob
from tkinter import *
from tkinter.scrolledtext import ScrolledText
from tkinter import filedialog
#____________________________________________________________________________
#____________________________________________________________________________
# zone de définition de fonctions
#____________________________________________________________________________
#____________________________________________________________________________
#__________________________________choisir_dossier____________________________
def choisir_dossier ():
"ouvre un dialogue de sélection de répertoire"
# voir http://tkinter.unpythonic.net/wiki/tkFileDialog
dossier = filedialog.askdirectory(
title="Sélectionnez le dossier de stockage",
mustexist=True,
parent=fenetre,
)
# un dossier a vraiment été sélectionné ?
if dossier:
# on remplit la liste de fichiers
remplir_liste(dossier)
# end if
# end def
#_________________________________remplir_liste_______________________________
def remplir_liste (dossier):
"""
remplit la liste de fichiers à partir de l'emplacement
@dossier fourni en paramètre de fonction;
"""
# init globales
global dossier_actuel
# on conserve le dossier en cours de traitement
dossier_actuel = dossier
# on récupère la liste des fichiers
_liste_fichiers = glob.glob(normaliser(dossier, motif_fichiers))
# on met à jour la listbox à travers la variable de contrôle
cvar_fichiers.set(" ".join(map(os.path.basename, _liste_fichiers)))
# end def
#__________________________________normaliser_________________________________
def normaliser (chemin, *args):
"met un chemin de fichier en conformité avec l'OS utilisé"
return os.path.normpath(os.path.join(chemin, *args))
# end def
#______________________________Afficher fichier______________________________
def afficher_fichier (event):
"affiche le contenu du fichier sélectionné"
# on récupère le nom du fichier
fichier = normaliser(
dossier_actuel,
liste_fichiers.get(liste_fichiers.curselection() or 0)
)
# est-ce réellement un fichier ?
if os.path.isfile(fichier):
# oui, on peut l'ouvrir
with open(fichier) as file_in:
# on efface d'abord la zone de texte
affichage_texte.delete("1.0", END)
# on insère le nouveau contenu texte du fichier
affichage_texte.insert("1.0", file_in.read())
# end with
# end if
# end def
#____________________________________________________________________________
#______________________________Afficher fichier Journalier______________________________
def aff_fich_Jr (event):
"affiche le contenu du fichier journalier"
# on récupère le nom du fichier
fichier = open("/home/pi/Desktop/buffer")
# est-ce réellement un fichier ?
if os.path.isfile(fichier):
# oui, on peut l'ouvrir
with open(fichier) as file_in:
# on efface d'abord la zone de texte
affichage_texte_Fil.delete("1.0", END)
# on insère le nouveau contenu texte du fichier
affichage_texte_Fil.insert("1.0", file_in.read())
# end with
# end if
# end def
#____________________________________________________________________________
#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
#_________________________________________________________________________________
#_________________________________________________________________________________
# début du programme
#_________________________________________________________________________________
#_________________________________________________________________________________
#____________________________________ init variables globales_____________________
dossier_actuel = ""
motif_fichiers = "*" #.txt
# on commence par établir l'interface graphique (GUI)
#______________________________création fenêtre principale________________________
fenetre = Tk()
fenetre.title("Lecture de l'Historique")
# SVP, NE FORCEZ PAS LA GÉOMÉTRIE de la fenêtre /!\
# elle va s'adapter toute seule...
fenetre.geometry("800x480")
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# partie selection de dossier
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#____________________________ création conteneur pour la gestion des fichiers_____
conteneur_fichiers = Frame(fenetre)
# on crée une étiquette texte dans ce conteneur
Label(
conteneur_fichiers,
text="Veuillez sélectionner un fichier :",
).grid(row=0, column=0, sticky=EW)
#on place le conteneur ROW =0 COLUMN = 0
# on rend le conteneur redimensionnable
conteneur_fichiers.columnconfigure(0, weight=1)
conteneur_fichiers.rowconfigure(1, weight=1)
#______________________________ création liste des fichiers_______________________
cvar_fichiers = StringVar()
liste_fichiers = Listbox(
conteneur_fichiers,
fg="black",
font="sans 10 bold",
listvariable=cvar_fichiers,
height=20,
width=20,
)
#on place la liste de fichier ROW =1 COLUMN = 0
liste_fichiers.grid(row=1, column=0, sticky=NS+EW)
#______________________________________ scrollbar_________________________________
vbar_fichiers = Scrollbar(conteneur_fichiers, orient=VERTICAL)
vbar_fichiers.grid(row=1, column=1, sticky=NS+W) # ROW = 1 COLUMN = 1
#____________________connexion scrollbar à la liste des fichiers__________________
liste_fichiers.configure(yscrollcommand=vbar_fichiers.set)
vbar_fichiers.configure(command=liste_fichiers.yview)
# on va gérer l'affichage des recettes sur simple clic
# sur un fichier de la liste
liste_fichiers.bind("<ButtonRelease-1>", afficher_fichier)
#___________________________création du bouton 'Parcourir'_______________________
Button(
conteneur_fichiers,
text="Sélectionner un dossier",
command=choisir_dossier,
).grid(row=2, column=0) # ROW =2 COLUMN = 0
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
# partie affichage de l'historique
#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
#______________________création du conteneur pour l'affichage____________________
conteneur_affichage = Frame(fenetre)
conteneur_fichiers.grid(row=0, column=0, sticky=NS+EW, padx=5, pady=5)
# on place le conteneur dans la fenêtre principale # ROW =0 COLUMN = 0
# avec des marges padx et pady
# on rend le conteneur redimensionnable
conteneur_affichage.columnconfigure(0, weight=1)
conteneur_affichage.rowconfigure(1, weight=1)
#___________________création étiquette texte dans ce conteneur__________________
Label(
conteneur_affichage,
text="historique :"
).grid(row=0, column=0, sticky=EW) # ROW =0 COLUMN = 0
#______________________création zone d'affichage de texte_______________________
affichage_texte = ScrolledText(
conteneur_affichage,
bg="white",
fg="blue",
font="sans 8 bold",
height=20,
width=45,
)
affichage_texte.grid(row=1, column=0, sticky=NS+EW) # ROW = 1 COLUMN = 0
"""bloquer la modification de texte"""
#affichage_texte.config(state='readonly')
#______________________création bouton Transfert________________________________
Button(
conteneur_affichage,
text="Transfert"
).grid(row=2, column=0,sticky=E)
#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
#....................................................................................
# PARTIE AFFICHAGE FIL DE L'EAU
#....................................................................................
#______________________création du conteneur pour l'affichage____________________
conteneur_affichage_Fil = Frame(fenetre)
conteneur_affichage_Fil.grid(row=0, column=1, sticky=NS+EW, padx=5, pady=5)
# on place le conteneur dans la fenêtre principale # ROW =0 COLUMN = 0
# avec des marges padx et pady
# on rend le conteneur redimensionnable
conteneur_affichage_Fil.columnconfigure(0, weight=1)
conteneur_affichage_Fil.rowconfigure(1, weight=1)
#___________________création étiquette texte dans ce conteneur__________________
Label(
conteneur_affichage_Fil,
text="fil de l'eau :"
).grid(row=0, column=1, sticky=EW) # ROW =0 COLUMN = 0
#______________________création zone d'affichage de texte_______________________
affichage_texte_Fil = ScrolledText(
conteneur_affichage_Fil,
bg="white",
fg="blue",
font="sans 8 bold",
height=20,
width=45,
)
affichage_texte_Fil.grid(row=1, column=1, sticky=NS+EW) # ROW = 1 COLUMN = 0
#______________________création bouton OK_______________________________________
Button(
conteneur_affichage_Fil,
text="Validation de la saisie"
).grid(row=2, column=1,sticky=E)
#_____________________création de la zone de saisie des commandes_______________
#Texte1
salut = StringVar()
Entry(conteneur_affichage_Fil,
textvariable=salut,
font="sans 10 bold",
).grid(row=2, column=1,sticky=W)
#.....................................................................................
"""
#__________________________________ bouton 'quitter'____________________________
Button(
conteneur_affichage,
text="Quitter",
command=fenetre.destroy
).grid(row=2, column=0, sticky=E) # ROW = COLUMN = 0
"""
# on place le conteneur dans la fenêtre principale
# avec des marges padx et pady
conteneur_affichage.grid(row=1, column=0, sticky=NS+EW, padx=5, pady=5)
# on rend la fenêtre redimensionnable
fenetre.rowconfigure(0, weight=1)
fenetre.columnconfigure(1, weight=1)
#_____________________________________________________________________________________
#_____________________________________________________________________________________
#pour demarer avec un dossier par défaut,
remplir_liste(r"/media/pi/USB2")
# pour finir
# on lance la boucle événementielle principale
fenetre.mainloop()
Pour la partie affichage fil de l'eau je n'ai pas grand chose.
L'objectif est de lire chaque jour le fichier journalier qui est rafraichi toutes les X secondes
Re: Demande d'aide Tkinter
J'ai aussi une question concernant la zone de texte et le bouton de validation qui se trouve à côté .
Le but c'est que l'utilisateur puisse saisir par exemple "DA,SE" et que lorsqu'on appui sur le bouton de Validation,
les caractères saisis soient inséré dans un script à coté .
Le but c'est que l'utilisateur puisse saisir par exemple "DA,SE" et que lorsqu'on appui sur le bouton de Validation,
les caractères saisis soient inséré dans un script à coté .
Code : Tout sélectionner
from tkinter import *
import subprocess,os
import threading,time
main = Tk()
main.geometry("500x400+300+400")
main.title('test debutant 2')
def OKLM():
os.system("./envoi2.sh Toto")
"""ici je cherche à lancer envoi.sh avec comme paramètre de texte les données
contenues dans Toto l'objectif est de placer dans envoi2.sh ce qui a été saisi au
clavier dans la zone de texte de l'IHM """
Toto = StringVar()
#Texte1
texte = Entry(main, textvariable = Toto).pack()
Button(main ,text = "push me !", command = OKLM ).pack()
Re: Demande d'aide Tkinter
Problème résolu pour l'envoi de commande.
Par contre, je suis toujours bloqué pour la lecture au fil de l'eau
Par contre, je suis toujours bloqué pour la lecture au fil de l'eau