Bonjour à toutes et à tous,

Je me présente en quelques mots. Je suis en charge de la gestion de l'infrastructure réseaux électriques et de données dans la société qui m'emploie et je suis régulièrement interpellé par mes collègues pour récupérer des informations spécifiques à l'intérieur de fichiers (log) qui contiennent généralement, des centaines de milliers de lignes. Afin de faciliter leur travail, je me suis mis en tête l'idée de développer une interface graphique (gui) basée sur un code python qui leur permettrait de récupérer ce qu'il me demande, d'une façon un peu plus 'autonome' que celle consistant à passer par mon intermédiaire.

Pour se faire, j'ai défini un GUI, ainsi que la fonction qui me permet de récupérer l'info (output2) souhaité. Ce petit bout de code fonctionne correctement lorsque le résultat doit apparaître dans le terminal de sortie. LE 'hic', c'est que j'aimerais bien que le résultat apparaissent dans le canvas dédié à cet effet dans le gui. en utilisant la fonction create_text, cela fonctionne, sauf que le résultat suivant vient écraser le résultat précédent, due au fait que j'ai du préciser une coordonnée pour faire apparaître la sortie en question. J'ai essayer en créant une zone de texte à l'intérieur du canvas, mais l'affichage de l'ensemble du gui 'plante' royalement. J'ai fait des essais avec la fonction focus_set, et lu les recommandations du forum pour l'utilisation de tkinter, mais je ne m'en sort pas. Pourriez-vous m'indiquer ce qu'il convient de faire ?

Il faudrait que le le résultat puisse venir toujours s'afficher en dessous de la précédente output pour pouvoir faire un export général de l'ensemble du contenu de la fenêtre par la suite.

Merci beaucoup pour tous vos conseils
Mac Os X 10.11
python 3.4

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import os
import subprocess
import shlex
import tkinter as tk
import sys
from tkinter.ttk import *
 
class RadioButton(tk.Frame):
 
    def __init__(self, parent, *args, **kwargs):
 
        self.parent = parent
        tk.Frame.__init__(self, parent, *args, **kwargs)
 
        LIST = [
            ('Order Type Check', 'OTC'),
            ('Tote Decoupling Check', 'TDC'),
            ('Tracking Tote Id', 'TTid'),
            ('List Pickers', 'LP'),
            ('Send Message To Picker(s)[csv]', 'SM'),
            ('Kill Pid(s)[csv]', 'Kid')
        ]
        v = tk.StringVar()
        v.set('OTC')
        val = 0
        for text, mode in LIST:
            self.radio = tk.Radiobutton(parent, text=text, variable=v, value=mode, bg='#ECECEC')
            self.radio.grid(row=0, column=val)
            val += 1
 
 
 
class SubFrame(tk.Frame):
 
    def __init__(self, parent, *args, **kwargs):
        self.parent = parent
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.width = 1020
        self.height = 630
        self.canvas = tk.Canvas(self, width=self.width, height=self.height, bg='#ECECEC')
        self.canvas.grid(row=1, column=0)
 
 
 
 
class TextArea(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        self.parent = parent
        tk.Text.__init__(self, parent, *args, **kwargs)
        self.width = 1020
        self.height = 630
        self.bill = tk.Text(self, width=self.width, height=self.height)
        self.bill.grid(row=1, column=0)
 
 
class MainFrame(tk.Frame):
 
    def __init__(self, master):
        tk.Frame.__init__(self, master)
 
 
        self.master = master
 
        self.frameH1 = Frame(self.master)
        self.frameH1.grid(row=0, column=0)
 
        self.radiobutton0_0 = RadioButton(self.frameH1)
        self.radiobutton0_0.grid(row=0, column=0, sticky=tk.E + tk.W)
 
        self.label1_0 = Label(self.frameH1, text='Tote Id')
        self.label1_0.grid(row=1, column=0, sticky=tk.E, pady=5)
 
        self.sep1_0 = Separator(self.frameH1, orient='horizontal')
        self.sep1_0.grid(row=0, column=0, columnspan=6, sticky=tk.W + tk.E + tk.S)
 
        self.entry1_1 = tk.StringVar()
        self.entry1_1 = Entry(self.frameH1, textvariable=self.entry1_1.get())
        self.entry1_1.grid(row=1, column=1)
 
 
        self.label1_2 = Label(self.frameH1, text='Pid')
        self.label1_2.grid(row=1, column=2, sticky=tk.E)
 
        self.entry1_3 = Entry(self.frameH1)
        self.entry1_3.grid(row=1, column=3)
 
        self.label1_4 = Label(self.frameH1, text='Picker Id')
        self.label1_4.grid(row=1, column=4, sticky=tk.E)
 
        self.entry1_5 = Entry(self.frameH1)
        self.entry1_5.grid(row=1, column=5)
 
        self.sep2_0 = Separator(self.frameH1, orient='horizontal')
        self.sep2_0.grid(row=1, column=0, columnspan=6, sticky=tk.W + tk.E + tk.S)
 
        self.sep3_0 = Separator(self.frameH1, orient='horizontal')
        self.sep3_0.grid(row=3, column=0, columnspan=6, sticky=tk.W + tk.E + tk.S)
 
        self.button2_0 = Button(self.frameH1, text='Execute', command=self.OnButtonClick)
        self.button2_0.grid(row=2, column=1, pady=5)
 
        self.button2_3 = Button(self.frameH1, text='Clear Screen', command=self.frameH1.quit)
        self.button2_3.grid(row=2, column=3)
 
        self.button2_5 = Button(self.frameH1, text='Quit', command=self.frameH1.quit)
        self.button2_5.grid(row=2, column=5, padx=15)
 
        self.frameH2 = Frame(self.master)
        self.frameH2.grid(row=1, column=0)
 
        # self.tex = TextArea(self.frameH2)
        # self.tex.grid(row=1, column=0)
        # self.tex.bill
 
 
        # self.displayArea = SubFrame(self.frameH2)
        # self.displayArea.grid(row=1, column=0)
        #self.displayArea.canvas.create_text(text=self.output2.get())
 
 
        self.frameH3 = Frame(master)
        self.frameH3.grid(row=2, column=0)
 
        self.label4_0 = Label(self.frameH3, text='PTL Server Network Status')
        self.label4_0.grid(row=0, column=0, pady=5, padx='10')
 
        self.c4_1 = tk.Checkbutton(self.frameH3, bg='#ECECEC')
        self.c4_1.grid(row=0, column=1, padx='10')
 
        self.label4_2 = Label(self.frameH3, text='Controller Network Status')
        self.label4_2.grid(row=0, column=2, padx='10')
 
        self.c4_3 = tk.Checkbutton(self.frameH3, bg='#ECECEC')
        self.c4_3.grid(row=0, column=3, padx='10')
 
        self.label4_4 = Label(self.frameH3, text='PLC Network Status')
        self.label4_4.grid(row=0, column=4, padx='10')
 
        self.c4_5 = tk.Checkbutton(self.frameH3, bg='#ECECEC')
        self.c4_5.grid(row=0, column=5, padx='10')
 
        self.Button4_6 = Button(self.frameH3, text='Export Screen Result', command=self.frameH2.quit)
        self.Button4_6.grid(row=0, column=6, padx='90')
 
 
    def OnButtonClick(self):
 
        filename = 'logptlcont'
        filepath = os.path.abspath(filename)
        command_line = '''awk -F, 'match ($0,toteID) {T=$4} END {print T}' filePath'''
        argos = shlex.split(command_line)
        argos[2] = 'match ($0, %s ) {T=$4} END {print T}' % self.entry1_1.get()
        argos[3] = filepath
        self.p = subprocess.check_output(argos)
        self.output1 = self.p.decode(sys.stdout.encoding)
        self.output2 = self.entry1_1.get() + str('-') + self.output1
        print(self.output2)
 
def main():
 
    root = tk.Tk()
    root.title('Watt v1.0 - Yves')
    root.configure(background='#ECECEC')
    MainFrame(root)
    root.mainloop()
 
if __name__ == '__main__':
    main()