CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Python - checkbutton bug

tux-life
tux-life
Niveau 7
02 août 2023 à 14:37:03

Salut, je crée une petite application pour apprendre un peu python, et j'ai un problème que je n'avais pas ce matin, mes checkbutton sont pré cochés avec un tiret dedans, comment changer cela ?

Merci !

https://image.noelshack.com/fichiers/2023/31/3/1690979668-capture-d-ecran-2023-08-02-143306.png

import time
import os
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from datetime import datetime
import threading
from horloge import Horloge

class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Bedtime")
        self.geometry("400x215")

def hibernation_programmee(heure, minute):
    # Récupérer l'heure actuelle
    maintenant = datetime.now()

    # Calculer le délai jusqu'à l'heure donnée
    heure_desiree = datetime(maintenant.year, maintenant.month, maintenant.day, heure, minute)
    delai = (heure_desiree - maintenant).total_seconds()

    if delai < 0:
        # Si l'heure donnée est déjà passée aujourd'hui, programmer pour demain
        heure_desiree = heure_desiree.replace(day=maintenant.day + 1)
        delai = (heure_desiree - maintenant).total_seconds()

    # Attendre jusqu'à l'heure donnée
    time.sleep(delai)

    # Mettre l'ordinateur en veille prolongée
    os.system("shutdown /h /f")

def eteindre_programmee(heure, minute):
    # Récupérer l'heure actuelle
    maintenant = datetime.now()

    # Calculer le délai jusqu'à l'heure donnée
    heure_desiree = datetime(maintenant.year, maintenant.month, maintenant.day, heure, minute)
    delai = (heure_desiree - maintenant).total_seconds()

    if delai < 0:
        # Si l'heure donnée est déjà passée aujourd'hui, programmer pour demain
        heure_desiree = heure_desiree.replace(day=maintenant.day + 1)
        delai = (heure_desiree - maintenant).total_seconds()

    # Attendre jusqu'à l'heure donnée
    time.sleep(delai)

    # Éteindre l'ordinateur
    os.system("shutdown /s /f /t 1")

def lancer_script():
    heure = int(heure_var.get())
    minute = int(minute_var.get())
    if veille_prolongee_check.get() and eteindre_check.get():
        messagebox.showinfo("Erreur", "Veuillez choisir uniquement l'une des options 'Veille prolongée' ou 'Éteindre'.")
    elif veille_prolongee_check.get():
        # Exécuter le script de veille prolongée dans un thread séparé
        threading.Thread(target=hibernation_programmee, args=(heure, minute)).start()
    elif eteindre_check.get():
        # Exécuter le script d'arrêt dans un thread séparé
        threading.Thread(target=eteindre_programmee, args=(heure, minute)).start()
    else:
        messagebox.showinfo("Erreur", "Veuillez choisir l'une des options 'Veille prolongée' ou 'Éteindre'.")

def arreter_script():
    os.system("shutdown /a")
    messagebox.showinfo("Script arrêté", "Le script de mise en veille prolongée a été arrêté.")

if __name__ == "__main__":
    app = Application()

    # Créer les variables pour stocker l'heure, les minutes et les options
    heure_var = tk.StringVar()
    minute_var = tk.StringVar()
    veille_prolongee_check = tk.BooleanVar()
    eteindre_check = tk.BooleanVar()

    # Créer les widgets
    heure_label = ttk.Label(app, text="Heure (0-23) :")
    heure_entry = ttk.Entry(app, textvariable=heure_var, width=5)
    minute_label = ttk.Label(app, text="Minute (0-59) :")
    minute_entry = ttk.Entry(app, textvariable=minute_var, width=5)
    veille_prolongee_check = ttk.Checkbutton(app, text="Veille prolongée", variable=veille_prolongee_check)
    eteindre_check = ttk.Checkbutton(app, text="Éteindre", variable=eteindre_check)
    lancer_button = ttk.Button(app, text="START", command=lancer_script)
    arreter_button = ttk.Button(app, text="STOP", command=arreter_script)

    # Positionner les widgets dans la fenêtre
    heure_label.grid(row=0, column=0, padx=5, pady=5, sticky="e")
    heure_entry.grid(row=0, column=1, padx=5, pady=5, sticky="w")
    minute_label.grid(row=1, column=0, padx=5, pady=5, sticky="e")
    minute_entry.grid(row=1, column=1, padx=5, pady=5, sticky="w")
    veille_prolongee_check.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
    eteindre_check.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
    lancer_button.grid(row=4, column=0, columnspan=2, padx=5, pady=5)
    arreter_button.grid(row=5, column=0, columnspan=2, padx=5, pady=0)

    # Créer l'horloge analogique
    clock = Horloge(app, width=200, height=200)
    clock.grid(row=0, column=2, rowspan=6, padx=10, pady=5)

    app.mainloop()
Message édité le 02 août 2023 à 14:37:33 par tux-life
tux-life
tux-life
Niveau 7
03 août 2023 à 10:04:54

Donc j'ai changé "check" par "var" pour mes checkbutton, et le problème est réglé, mais je ne comprends pas bien la différence entre les deux noms de variables mis à part ce problème, si quelqu'un saurait m'expliquer.
Ce que je ne comprends pas avec le check, c'est que même en utilisant la méthode .set je ne parviens pas à changer la value de base par 0 ou 1, dans tout les cas le checkbutton reste semi coché

    # Créer les variables pour stocker l'heure, les minutes et les options
    heure_var = tk.StringVar()
    minute_var = tk.StringVar()
    veille_prolongee_var = tk.BooleanVar()
    eteindre_var = tk.BooleanVar()

    # Créer les widgets
    heure_label = ttk.Label(app, text="Heure (0-23) :")
    heure_entry = ttk.Entry(app, textvariable=heure_var, width=5)
    minute_label = ttk.Label(app, text="Minute (0-59) :")
    minute_entry = ttk.Entry(app, textvariable=minute_var, width=5)
    veille_prolongee_check = ttk.Checkbutton(app, text="Veille prolongée", variable=veille_prolongee_var)
    eteindre_check = ttk.Checkbutton(app, text="Éteindre", variable=eteindre_var)
    lancer_button = ttk.Button(app, text="START", command=lancer_script)
    arreter_button = ttk.Button(app, text="STOP", command=arreter_script)
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment