écran tactile et bouton

Bonjour à tous,

Je débute sur Python et j'ai une question concernant l'utilisation de tkinter sur un écran tactile sous Windows. Est-il possible de déclencher une action avec une seule "tape" au doigt et garder le doigt pour continuer l'action ?

Je suis en partage de bureau à distance, lorsque j'utilise ma souris pour cliquer sur un bouton, tout fonctionne. Cependant, sur l'écran tactile, je suis obligé de faire deux tapes avec mon doigt.

Le problème est que cette action déclenche un relais, et il n'est pas intuitif de devoir faire deux tapes. Idéalement, le relais devrait s'enclencher lorsque je pose mon doigt et se couper lorsque je le retire, comme cela fonctionne avec la souris.

Auriez-vous une solution à ce problème ?

Merci d'avance !

5 réponses

  1. Peux-tu installer kivy :

    pip install kivy

    Et tester ce script :

    import kivy
    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.uix.relativelayout import RelativeLayout
    from kivy.config import Config
    Config.set('graphics', 'width', '400')
    Config.set('graphics', 'height', '200')
    
    # class in which we are creating the button
    class ButtonApp(App):
    
        def build(self):
            self.title = "Test Touch"
            relative_layout = RelativeLayout() 
            button1 = Button(text='Click Me!',
                            size_hint =(.2, .2), 
                            pos_hint ={'center_x':.5, 'center_y':.5}, 
                            on_press=self.pressed,
                            on_release=self.released,
                            )
            relative_layout.add_widget(button1)
            return relative_layout
    
        def pressed(self, event):
            print("button pressed")
    
        def released(self, event):
            print("button released")
    
    root = ButtonApp()
    root.run()
    
    1. Une norme merci à toi, ça fonctionne...Mais quel bordel kivy

      Autant avec tkinter c'était la misère pour la disposition des boutons, que là...je n'ai même pas réussi à faire mon affichage graphique pareil que dans Tkinter... juste rapproché. 

      j'utilisais l'IDLE Shell de python pour executer mes script, eh bien va savoir pourquoi, impossible de fermer mon script, que ce soit par un bouton ou la croix de la fenêtre, obliger de lancer le script en mode DOS.

      Je hais Python, mais imposé de l'utiliser pour mes cartes relais USB.
      Il faut dire qu'il y a 15 jours, je savais même pas que ça existait ^^

      si tu as besoin d'une modélisation 3D et que tu ne sais pas faire, demande-moi ^^


      En tout cas, la tape unique fonctionne bien, encore merci ^^

      https://youtube.com/shorts/HyHduDbTTdQ?feature=share

  2. Contributeur

    bonjour,

    ce comportement (2 tap pour cliquer) est-il spécifique à tkinter?

    1. hello,

      je ne comprends pas la question ^^
      je n'ai rien trouvé sur le net concernant cette interogation 

    2. Contributeur
      @astuces72

      Quand tu utilises ton ordi, par exemple dans un navigateur, tu dois aussi faire 2 taps pour cliquer?

    3. @yg_be

      Non, en fait ça a le même comportement qu'un tactile sous Windows, 2 tapes pour lancer un programme sur le bureau, une tape pour les liens.

  3. Salut,

    J'ai également un écran tactile et le comportement est identique que ce soit un tap ou un clic.

    1. slt,

      ton écran tactile, et les icônes du bureau, c'est une seule tape ?
      Moi c'est deux tapes, et les liens une tape, le classique.

      Mais ce n'est pas sous Windows le souci, c'est sous python
       

  4. la partie qui actionne mes relais.

     

    # bouton de boisson est pressé
    def on_boisson_pressed(boisson):
        relay_num, port_com = boisson_relais.get(boisson, (None, None))
        if relay_num is not None and port_com is not None:
            activate_relay(relay_num, port_com, boisson)
        else:
            print(f"Erreur: Pas de correspondance de relais pour la boisson {boisson}")
    
    # bouton de boisson est relâché
    def on_boisson_released(boisson):
        relay_num, port_com = boisson_relais.get(boisson, (None, None))
        if relay_num is not None and port_com is not None:
            deactivate_relais(relay_num, port_com, boisson)
            etat_label.config(text="")  # Met à jour le texte
        else:
            print(f"Erreur: Pas de correspondance de relais pour la boisson {boisson}")
    
    
    button_boisson = tk.Button(frame_boissons, image=photo_boisson, borderwidth=0,highlightthickness=0, padx=20, pady=20, bg="black")
        button_boisson.image = photo_boisson
        button_boisson.bind("<ButtonPress>", lambda event, b=boisson: on_boisson_pressed(b))
        button_boisson.bind("<ButtonRelease>", lambda event, b=boisson: on_boisson_released(b))

    Ce code fonctionne très bien avec la souris en bureau à distance, un seul clic, mais une fois sur l'écran tactile, je suis obligé de faire deux tapes.

    Une solution pour activer quand je pose le doigt, et se désactiver quand je l'enlève ?

    Merci ^^

    1. @Diablo76

      merci pour le lien, je vais aller voir.

      C'est un mini écran 1024*600 tactile, c'est pour faire un windows en mode kiosque.
      il n'y aura aucun autre écran, et la programme/dépannage/gestion... je la fais via bureau à distance avec un autre pc

    2. @astuces72

      Ok, mais il est connecté sur quoi ?? , si c'est sous Windows ou autre, le clic devrait marcher pareil qu'un tap sur le bouton tkinter

    3. @Diablo76

      sur un Windows.
      Le clic réagi comme les icônes sur le bureau de Windows, 2 tapes...


      Tous les autres boutons ont des fonctions différentes, et ils fonctionnent au simple tape/relâche par ce que c'est le but d'un bouton, un clic et relâche, ce qui fonctionne parfaitement avec la souris, normal.
      Mais moi, il me faut une action à la tape= mise en marche du relais, relâche = arrêt relais.
      Ce qui fonctionne parfaitement avec la souris, mais là, pas sur le tactile. 

  5. Contributeur

    Quand tu poses ton doigt sans le retirer immédiatement, c'est une action de type "press and hold".  Il semble que certains écrans tactiles interpretent cela comme un clic droit.  Tu dois aller voir dans les options de ton écran tactile, sous Windows.

    De toutes façons, je pense que tkinter n'a aucune influence sur cela, c'est du côté des paramètres ou du pilote de l'écran tactile que tu dois chercher.

    1. Contributeur
      @astuces72

      Quels boutons fonctionnent comment quand tu touches et continue à toucher via l'écran tactile?

    2. @yg_be

      Les boutons qui ne fonctionnent pas quand je garde le doigt ^^

      Si je garde le doigt, il ne se passe rien, mais si je déplace mon doigt, ça fonctionne comme il faudrait 

      une vidéo de ce qu'il se passe :
      Double tape ça fonctionne.
      Simple tape, il ne se passe rien.
      Simple tape et glissement du doigt, ça fonctionne.

      https://youtube.com/shorts/NZg9WC4qIyY

    3. Contributeur
      @astuces72

      Tu montres le fonctionnement dans tkinter?

      Il faut d'abord faire fonctionner cet écran tactile dans Windows, hors ton appli Python.  Si Windows réagis au simple tap (poser/déposer) et/ou au "poser et tenir", il y aura peut-être moyen que tkinter puisses traiter cela.

    4. @yg_be

      oui, c'est sous tkinter, sur le bureau de Windows, c'est pareil pour lancer les programme.
      Comme tout écran tactile sous Windows en fait.