Bonjour,

Existe t'il un moyen simple de récupérer les évènements clavier avec overrideredirect ?

Pour le moment je ne suis arriver qu'a du code comme ceci mais je dois avouer que ce n'est pas terrible.

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
#-*- coding: utf-8 -*-
#
#
#
try:
    import Tkinter
except:
    import tkinter as Tkinter
import termios, sys, os
from time import sleep
 
class interface(Tkinter.Tk):
    def __init__(self):
        Tkinter.Tk.__init__(self)
        self.geometry("%dx%d+0+0" % (self.winfo_screenwidth(), self.winfo_screenheight()))
        self['bg']='black'
        self.labaffichage = Tkinter.Label(self, bg='white', width=50)
        self.labaffichage.pack()
        self.overrideredirect(1)
 
    def setvalue(self, value):
        self.labaffichage['text']=value
        self.labaffichage.update()
 
class gestionnaire():
    def __init__(self, view):
        self.view = view()
        self.view.protocol("WM_DELETE_WINDOW", self._intercepte)
        self.view.bind('<1>', self._clicevent)
        self.flag = True
        self.view.update()
        while self.flag == True:
            lettre = self.getkey()
            if lettre.isalpha():
                self.view.setvalue(lettre)
            elif lettre == '':
                self.flag = False
 
    def getkey(self):
        TERMIOS = termios
        fd = sys.stdin.fileno()
        old = termios.tcgetattr(fd)
        new = termios.tcgetattr(fd)
        new[3] = new[3] & ~TERMIOS.ICANON & ~TERMIOS.ECHO
        new[6][TERMIOS.VMIN] = 1
        new[6][TERMIOS.VTIME] = 0
        termios.tcsetattr(fd, TERMIOS.TCSANOW, new)
        c = None
        try:
            c = os.read(fd, 1)
        finally:
            termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, old)
        return c
 
    def _intercepte(self, event=None):
        self.flag = False
        self.view.destroy()
 
    def _clicevent(self, event):
        self._intercepte()
 
if __name__ == '__main__':
    app = gestionnaire(interface)
Merci d'avance

Edit:
J'avais simplifier le code avec un while à la place d'un thread pour la lecture mais comme celui ci est bloquant je rajoute un elif.