Partage
  • Partager sur Facebook
  • Partager sur Twitter

un widget inconnu

    22 juillet 2021 à 19:53:19

    bonjour, je veux crée un widget en python et je ne sait ni le cree ni son nom voila une photo 
    • Partager sur Facebook
    • Partager sur Twitter

    il y'a pas de mauvaise application ou site, juste un mauvais code !

    Anonyme
      22 juillet 2021 à 20:54:40

      Salut,

      C'est un bouton switch très utilisé sous iOS et iPadOS, mais avec, quoi veux-tu le créer, quelle lib ?

      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2021 à 12:39:43

        en cherchant python switch sur ton moteur de recherche préféré, tu pourrais tombé sur des tutos pour le faire (ou un semblant) par exemple ici https://www.geeksforgeeks.org/on-off-toggle-button-switch-in-tkinter/ (utilise tkinter, une image off, une image off, et un Button)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 juillet 2021 à 15:11:29 - Message modéré pour le motif suivant : Message complètement hors sujet


            23 juillet 2021 à 18:03:41 - Message modéré pour le motif suivant : Réponse à un message modéré


            il y'a pas de mauvaise application ou site, juste un mauvais code !

            Anonyme
              24 juillet 2021 à 5:40:50

              Salut,

              Si l'on voulait parfaire ce switch On/Off avec Tkinter, il faudrait tenir compte de l'animation du bouton :

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                24 juillet 2021 à 13:32:20

                Cadeau...
                import tkinter as tk
                from PIL import Image, ImageTk
                import time
                 
                class ImageLabel(tk.Label):
                    def load(self, obj):
                        for frame in obj[0]:
                            self.config(image=frame)
                            root.update()
                            time.sleep(obj[1]/1000)
                        
                
                def change(event):
                    lbl.state=1-lbl.state
                    lbl.load(states[lbl.state])
                
                def load(im):
                    
                    frames = [] 
                    try:
                        i=0
                        while True:
                            frames.append(ImageTk.PhotoImage(im.copy()))
                            im.seek(i)
                            i+=1
                    except EOFError:
                        pass
                    
                    try:
                        delay = im.info['duration']
                    except:
                        delay = 100
                
                    return frames, delay
                 
                #demo :
                root = tk.Tk()
                lbl = ImageLabel(root)
                lbl.pack()
                states = [load(Image.open('off.gif')),load(Image.open('on.gif'))]
                lbl.state = 1
                lbl.load(states[lbl.state])
                lbl.bind("<Button-1>", change)
                root.mainloop()
                
                on.gif =            off.gif = 
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2021 à 18:25:29

                  @ErispoeLeNarvalo

                  Le changement d'état de ton bouton est instantanée si je me trompe. On ne voit pas le système de glissement entre on et off.

                  Ce qu'il faudrait à mon sens est un gif comme représenté par Diablo76 allant d'un état à l'autre état et vice versa.


                  • Partager sur Facebook
                  • Partager sur Twitter

                  Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                  La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  Anonyme
                    24 juillet 2021 à 18:51:33

                    @fred1599
                    Chez moi ça marche :
                    https://youtu.be/Vbo21mRwxqg

                    PS : Les gif que j'ai partagé ne sont pas en boucle mais ils sont bien animés, faire clic droit sur l'image -> ouvrir dans un nouvel onglet

                    -
                    Edité par Anonyme 24 juillet 2021 à 19:12:19

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 juillet 2021 à 19:26:52

                      Ah bah alors c'est cool ;)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                        24 juillet 2021 à 21:03:10

                        Mise à part l'animation, un widget comme checkbutton admet le passage d'une image à une autre pour visualiser la sélection... et un checkbutton fait beaucoup plus de choses qu'un Label (méthodes à ajouter si on veut que çà ressemble à...) mais si on veut personnaliser tous ses widgets, le Canvas permet cela (avec du temps et de la patience).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 juillet 2021 à 6:27:10

                          ErispoeLeNarvalo a écrit:

                          Cadeau...

                          import tkinter as tk
                          from PIL import Image, ImageTk
                          import time
                           
                          class ImageLabel(tk.Label):
                              def load(self, obj):
                                  for frame in obj[0]:
                                      self.config(image=frame)
                                      root.update()
                                      time.sleep(obj[1]/1000)
                                  
                          
                          def change(event):
                              lbl.state=1-lbl.state
                              lbl.load(states[lbl.state])
                          
                          def load(im):
                              
                              frames = [] 
                              try:
                                  i=0
                                  while True:
                                      frames.append(ImageTk.PhotoImage(im.copy()))
                                      im.seek(i)
                                      i+=1
                              except EOFError:
                                  pass
                              
                              try:
                                  delay = im.info['duration']
                              except:
                                  delay = 100
                          
                              return frames, delay
                           
                          #demo :
                          root = tk.Tk()
                          lbl = ImageLabel(root)
                          lbl.pack()
                          states = [load(Image.open('off.gif')),load(Image.open('on.gif'))]
                          lbl.state = 1
                          lbl.load(states[lbl.state])
                          lbl.bind("<Button-1>", change)
                          root.mainloop()
                          

                          on.gif =            off.gif = 


                          Bonjour,

                          Je n'ai pas testé ton code (et je suis encore à moitié endormi)... Je vois :

                          im.info['duration']

                           Tes images sont donc des gifs animés?

                          • Partager sur Facebook
                          • Partager sur Twitter
                          • J'aime les bananes, le python, le gnu, le pingouin.
                            • Vive le libre !
                            25 juillet 2021 à 7:22:45

                            __fabien a écrit:

                            Je n'ai pas testé ton code (et je suis encore à moitié endormi)

                            Tu regardes les JO ?

                            Je suis mort, je vais rater la fin du vélo.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 juillet 2021 à 16:36:08

                              import tkinter
                              
                              
                              _STATIC_PARAMETERS = {
                                  "from_": 0,
                                  "to": 1,
                                  "resolution": 0.1,
                                  "showvalue": 0
                              }
                              
                              _DEFAULT_PARAMETERS = {
                                  "troughcoloron": "blue",
                                  "length": 50,
                                  "orient": "horizontal",
                                  "sliderlength": 30,
                                  "width": 20
                              }
                              
                              
                              class SwitchButton(tkinter.Scale):
                              
                                  __slots__ = "_command", "_coloroff", "_coloron", "_value"
                                  
                                  def __init__(self, master=None, default=False, **kw):
                                      super().__init__(master)
                                      self._coloroff = self._coloron = super().cget("troughcolor")
                                      self._command = None
                                      cnf = _DEFAULT_PARAMETERS.copy()
                                      cnf.update({key.lower(): value for key, value in kw.items()})
                                      self.configure(cnf)
                                      if not isinstance(default, bool):
                                          raise TypeError("default must be a boolean")
                                      self._value = default
                                      super().set(default)
                                      make_callback = lambda function: lambda event: function()
                                      self.bind("<ButtonRelease>", make_callback(self.invoke))
                                      self.bind("<Return>", make_callback(self.invoke))
                                      self.bind("<space>", make_callback(self.invoke))
                                      self.bind("<Up>", make_callback(self.deselect))
                                      self.bind("<Left>", make_callback(self.deselect))
                                      self.bind("<Down>", make_callback(self.select))
                                      self.bind("<Right>", make_callback(self.select))
                              
                                  def __getitem__(self, key):
                                      key = key.lower()
                                      if key == "command":
                                          return self._command
                                      if key == "troughcoloroff":
                                          return self._coloroff
                                      if key == "troughcoloron":
                                          return self._coloron
                                      return super().cget(key)
                                  cget = __getitem__
                              
                                  def __setitem__(self, key, value):
                                      self.configure({key: value})
                              
                                  def _colorize(self, value):
                                      color = (self._coloroff, self._coloron)[int(float(value))]
                                      self.configure(troughcolor=color)
                              
                                  def configure(self, cnf=None, **kw):
                                      if cnf is None:
                                          cnf = {}
                                      elif not isinstance(cnf, dict):
                                          raise TypeError("cnf must be a dict object")
                                      if not (cnf or kw):
                                          return super().configure()
                                      cnf.update(kw)
                                      cnf = {key.lower(): value for key, value in cnf.items()}
                                      cnf.update(_STATIC_PARAMETERS)
                                      self._coloroff = cnf.pop("troughcoloroff", self._coloroff)
                                      self._coloron = cnf.pop("troughcoloron", self._coloron)
                                      self._command = cnf.get("command", self._command)
                                      cnf["command"] = self._colorize
                                      super().configure(cnf)
                                  config = configure
                              
                                  def invoke(self):
                                      current = super().get()
                                      if self._value == current:
                                          self.set(not self._value)
                                      else:
                                          self.set(current >= 0.5)
                                  toggle = invoke
                              
                                  def select(self):
                                      self.set(True)
                              
                                  def deselect(self):
                                      self.set(False)
                              
                                  def get(self):
                                      return bool(int(float(super().get())))
                              
                                  def set(self, value):
                                      if not isinstance(value, bool):
                                          raise TypeError("value must be a boolean")
                                      elif self["state"] == "disabled":
                                          self._value = False
                                          super().set(self._value)
                                      else:
                                          self._value = value
                                          super().set(value)
                                          if self._command is not None:
                                              self._command(value)
                              
                              
                              # Demo:
                              
                              def on_switch(value):
                                  label["text"] = "Switch " + ("on/OFF", "ON/off")[value]
                              
                              root = tkinter.Tk()
                              
                              label = tkinter.Label(root)
                              label.pack()
                              
                              on_switch(0)
                              
                              button = SwitchButton(root, command=on_switch)
                              button.pack()
                              
                              root.mainloop()

                              -
                              Edité par .H.D.1. 26 juillet 2021 à 14:52:37

                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 juillet 2021 à 20:25:33

                                CristianoRolando a écrit:Tu regardes les JO ?

                                Non, je me lève avant le chant du coq (activité agricole oblige) mais je ne me couche pas forcement à l'heure des poules^^



                                • Partager sur Facebook
                                • Partager sur Twitter
                                • J'aime les bananes, le python, le gnu, le pingouin.
                                  • Vive le libre !
                                  29 juillet 2021 à 14:20:33

                                  un autre exemple du switch button en QT5 (pompé sur Stackoverflow => https://stackoverflow.com/a/56815938 )

                                  from PyQt5 import QtCore, QtGui, QtWidgets
                                  from PyQt5.QtCore import Qt, QRect
                                  import sys
                                  
                                  class MySwitch(QtWidgets.QPushButton):
                                      def __init__(self, parent = None):
                                          super().__init__(parent)
                                          print('init')
                                          self.setCheckable(True)
                                          self.setMinimumWidth(66)
                                          self.setMinimumHeight(22)
                                  
                                      def paintEvent(self, event):
                                          label = "ON" if self.isChecked() else "OFF"
                                          bg_color = Qt.green if self.isChecked() else Qt.red
                                  
                                          radius = 10
                                          width = 32
                                          center = self.rect().center()
                                  
                                          painter = QtGui.QPainter(self)
                                          painter.setRenderHint(QtGui.QPainter.Antialiasing)
                                          painter.translate(center)
                                          painter.setBrush(QtGui.QColor(0,0,0))
                                  
                                          pen = QtGui.QPen(Qt.black)
                                          pen.setWidth(2)
                                          painter.setPen(pen)
                                  
                                          painter.drawRoundedRect(QRect(-width, -radius, 2*width, 2*radius), radius, radius)
                                          painter.setBrush(QtGui.QBrush(bg_color))
                                          sw_rect = QRect(-radius, -radius, width + radius, 2*radius)
                                          if not self.isChecked():
                                              sw_rect.moveLeft(-width)
                                          painter.drawRoundedRect(sw_rect, radius, radius)
                                          painter.drawText(sw_rect, Qt.AlignCenter, label)
                                  
                                  class Ui_MainWindow(object):
                                      def setupUi(self, MainWindow):
                                          ....
                                          self.tableWidget.setColumnCount(4)
                                          ....
                                          item = QtWidgets.QTableWidgetItem()
                                          self.tableWidget.setHorizontalHeaderItem(3, item)
                                          ...
                                  
                                      def retranslateUi(self, MainWindow):
                                          ...
                                          item = self.tableWidget.horizontalHeaderItem(3)
                                          item.setText(_translate("MainWindow", "status"))
                                  
                                      def bindSave(self):
                                          ...
                                          ch_bx3 = MySwitch()
                                          ch_bx3.setChecked(True)
                                          ch_bx3.clicked.connect(ch_bx1.setEnabled)
                                          ch_bx3.clicked.connect(ch_bx2.setEnabled)
                                          self.tableWidget.setCellWidget(numRows, 3, ch_bx3)
                                  
                                  
                                  if __name__ == "__main__":
                                      if not QtWidgets.QApplication.instance():
                                          app = QtWidgets.QApplication(sys.argv)
                                      else:
                                          app = QtWidgets.QApplication.instance()
                                      MainWindow = QtWidgets.QMainWindow()
                                      ui        = Ui_MainWindow()
                                      ui.setupUi(MainWindow)
                                      MainWindow.show()
                                      app.exec()



                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  un widget inconnu

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown