Bonjour à tous,
Je suis un p'tit Belge totalement débutant en python. J'ai presque fini le tutoriel de Openclassroom, et je suis en train de lire le guide offert par dev.net. J'ai des bonnes notions en HTML et Batch, un peu en JS et PHP, et j'ai "codé" des trucs pas trop mal (pour moi en tout cas) il y a 10 ans sur le GECK (l'éditeur du jeu Fallout 3). A part ça, je n'y connait absolument rien...
J'utilise Windows 10, IDE, Python 3.8.2, opencv2, tkinter, PIL,...
Mon premier ambitieux projet est de créer une application Win10, qui se lance au démarrage de ma session Windows. En voici les caractéristiques :
-Encryptage d'un dossier au lacement du programme (j'ai déjà écrit un script Batch pour ça)
-Plein écran sans barre de titre
-Image d'arrière plan
-Demande de mot de passe
-Décryptage d'un dossier si mot de passe ok (script batch toujours)
-Screenshots de la webcam vers des fichiers jpg, png...
-Pas de possibilité de Alt F4
-Envoi d'un mail avec Date, adresse IP et captures d'écran Webcam en PJ
-Garder une fenêtre ouverte en permanence en "arrière plan" de windows afin de crypter le dossier via raccourci clavier et verrouiller la session Windows.
Bien entendu ce programme sera utilisé à des fins professionnelles et en toute légalité.
Pour le moment j'ai réussi à trouver des scripts pour faire un peu tout ça mais je n'arrive pas à tout mettre dans une seule fenêtre, et j'ai beau tourner et retourner le problème dans tous les sens je ne comprends pas... Je pense qu'un code fait appel à "class Interface(Tk):" et un autre à "def show_frame():" et que du coup ça ne peut pas fonctionner ainsi. Du coup, quand je lance mon code, j'ai soit : 2 ou 3 fenêtres avec chacune l'une des caractéristiques dont j'ai besoin, soit rien qui fonctionne...
On va y aller step-by-step au niveau de mes 1000 questions, et si vous pouviez déjà juste m'aider à comprendre comment créer une seule fenêtre tkinter dans laquelle mettre touts ces objets, widgets, texts, images etc, ce serait génial! Je ne demande pas de solution clé en main (j'ai lu assez de forum pour constater que cela était très mal vu et je le comprends), juste des indices, explications, conseils...
Je suis désolé si ces question vous paraissent très basiques, mais j'ai vraiment du mal à comprendre l'interface graphique avec Python, c'est autrement plus compliqué qu'en HTML...
Voici le code (je sait que c'est très "fouillis"...) :
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 #### #Caméra dans fenêtre fullscreen #### from collections import deque import tkinter as tk from tkinter import * from tkinter import messagebox #### Si j'importe une fois tkinter au complet, peut-être pas besoin d'importer tous les modules en plus ? import cv2 import time from PIL import Image, ImageTk import numpy import os from tkinter import Tk, PhotoImage, Canvas #### #WWallpaper #### class Interface(Tk): def __init__(self, path_image): super(Interface, self).__init__() self.image = PhotoImage(file=path_image) #### Je dois comprendre la commande self self.w, self.h = self.image.width(), self.image.height() self.canvas = Canvas(self, width=self.w, height=self.h) self.canvas.pack() self.canvas.create_image((self.w//2, self.h//2), image=self.image) self.mainloop() Interface('1.png') def quit_(root): root.destroy() #Print screen img_counter = 0 k = cv2.waitKey(1) if k%256 == 32: # SPACE pressed img_name = "opencv_frame_{}.png".format(img_counter) cv2.imwrite(img_name, frame) print("{} written!".format(img_name)) img_counter += 1 ### def show_frame(): ### Je dois arriver à lier le print screen avec ça _, frame = cap.read() frame = cv2.flip(frame, 1) cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) imgtk = ImageTk.PhotoImage(image=img) lmain.imgtk = imgtk lmain.configure(image=imgtk) lmain.after(10, show_frame) width, height = 800, 600 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height) root = tk.Tk() root.bind('<Escape>', lambda e: root.quit()) root.wm_attributes('-fullscreen','true') lmain = tk.Label(root) lmain.pack() # quit button quit_button = tk.Button(master=root, text='Quit',command=lambda: quit_(root)) quit_button.pack() show_frame() root.mainloop()
Partager