Matt Brunet
Matt Brunet

Reputation: 11

How to get a RadioButton to work

Im trying to get my RadioButton to work and return something. Well to be a bit clearer I want it to go something like this. The user select 2 Joueur or 3 Joueur, next select Sans or Avec and then press the Jouer Button and the program swift to the next window, but can't figure out how. Here the code im working with at the moment.

My program is a PokerDice game using tkinter as interface. Im French so thats why the variable are all in French.

Thanks for your help in advance

class PokerDice(Tk):
def __init__(self):
    Tk.__init__(self)

    programme = Frame()
    programme.pack(side="top", fill="both", expand=True)
    programme.grid_rowconfigure(0, weight=5)
    programme.grid_columnconfigure(0, weight=5)

    self.pages = {}
    for unePage in (DebuterProgramme, PageInstructions, PartiesDePoker, LancerParties):
        page_de_demarrage = unePage(programme, self)
        self.pages[unePage] = page_de_demarrage
        page_de_demarrage.grid(row=0, column=0, sticky="nsew")
    self.voir_pages(DebuterProgramme)

def voir_pages(self, cont):
    voir_page_de_demarrage = self.pages[cont]
    voir_page_de_demarrage.tkraise()


class DebuterProgramme(Frame):
def __init__(self, parent, controller):
    Frame.__init__(self, parent)
    label = Label(self, text="Poker D'As", font=LARGE_FONT)
    label.pack(pady=10, padx=10)

    button_instructions = Button(self, text="Instructions",
                                 command=lambda: controller.voir_pages(PageInstructions))
    button_instructions.pack()

    button_jouer = Button(self, text="Jouer",
                          command=lambda: controller.voir_pages(PartiesDePoker))
    button_jouer.pack()

    button_jouer = Button(self, text="Quitter", command=quit)
    button_jouer.pack()


class PageInstructions(Frame):
def __init__(self, parent, controller):
    Frame.__init__(self, parent)
    label = Label(self, text="Instructions", font=LARGE_FONT)
    label.pack(side="top", fill="both", expand=True, pady=10, padx=10)
    var = StringVar()
    text = Message(self, textvariable=var, font=NORMAL_FONT)
    var.set("\n1. Vous devez choisir le nombres de joueurs pour la partie."
            "\n\n2. Vous devez choisir si les AS sont des jokers ( dés frimés )."
            "\n\n3. Losque la partie seras debute vous devez inscrire les noms "
            "des joueurs dans les cases respectives."
            "\n\n4. Le premier joueur lanceras les dés un maximum de 3 fois,"
            " le deuxième joueurs auras le même nombres de lancers que le joueur 1."
            " Il est avantangeux d'être le premier a jouer."
            "\n\n5. "
            "\n\n6. Vous devez inscrire les changements de dés de cette façon. "
            "exemple : 1,2,3 ou appuyer sur la touche [ENTER] pour relancer aucun dés"
            "\n\n7. Le but du jeu de Poker D'AS est d'avoir les meilleurs combinaisons de dés possibles."
            "\n\n8. Voici une liste des meilleurs combinaisons de dés possible en ordre"
            "décroissant."
            "\n\nQuinton (5 dés même valeur)"
            "\n\nCarre (4 dés de même valeur)"
            "\n\nFull (3 dés de même valeur et une paire)"
            "\n\nBrelan (3 dés de même valeur)"
            "\n\nSequence (soit du dés 9 a ROI ou 10 a AS )"
            "\n\nDeux paires (2 dés de même valeur + 2 dés de même valeur)"
            "\n\nUne Paire (2 dés de même valeur)"
            "\n\n")
    text.pack()

    button_retour = Button(self, text="Retour", command=lambda: controller.voir_pages(DebuterProgramme))
    button_retour.pack()


class PartiesDePoker(Frame):
def __init__(self, parent, controller):
    Frame.__init__(self, parent)
    label = Label(self, text="Vous voulez combien de joueurs ? ", font=LARGE_FONT)
    label.grid(row=0, column=0, padx=10, pady=10)

    button_joueur2 = Radiobutton(self, text="2 Joueurs", command=lambda: controller.voir_pages(LancerParties))
    button_joueur2.grid(row=0, column=1, padx=10, pady=10)

    button_joueur3 = Radiobutton(self, text="3 Joueurs")
    button_joueur3.grid(row=0, column=2, padx=10, pady=10)

    label = Label(self, text="Voulez-vous jouer sans frimes ou avec frimes ?", font=LARGE_FONT)
    label.grid(row=1, column=0, padx=10, pady=10)

    button_oui = Radiobutton(self, text="Sans")
    button_oui.grid(row=1, column=1, padx=10, pady=10)
    button_non = Radiobutton(self, text="Avec")
    button_non.grid(row=1, column=2, padx=10, pady=10)

    button_retour = Button(self, text="Retour", command=lambda: controller.voir_pages(DebuterProgramme))
    button_retour.grid(row=2, column=2, padx=10, pady=10)

    button_jouer = Button(self, text="Jouer", command=lambda: controller.voir_pages(LancerParties))
    button_jouer.grid(row=2, column=1, padx=10, pady=10)


class LancerParties(Frame):
def __init__(self, parent, controller):
    Frame.__init__(self, parent)

    label_joueur_1 = Label(self, text="Joueur # 1")
    label_joueur_1.grid(row=0, column=0, padx=10, pady=10)
    nom_joueur_1 = Entry(self)
    nom_joueur_1.grid(row=0, column=1)

    label_joueur_2 = Label(self, text="Joueur # 2")
    label_joueur_2.grid(row=1, column=0, padx=10, pady=10)
    nom_joueur_2 = Entry(self)
    nom_joueur_2.grid(row=1, column=1)

    label_joueur_3 = Label(self, text="Joueur # 3")
    label_joueur_3.grid(row=2, column=0, padx=10, pady=10)
    nom_joueur_3 = Entry(self)
    nom_joueur_3.grid(row=2, column=1)

    button_lancer_partie = Button(self, text="Lancer la partie",
                                  command=lambda: controller.voir_pages(DebutDeLaPartie))
    button_lancer_partie.grid(row=3, column=1, padx=10, pady=10)


class DebutDeLaPartie(Frame):
def __init__(self, parent):
    Frame.__init__(self, parent)
pass

pokerAs = PokerDice() pokerAs.mainloop()

Upvotes: 0

Views: 72

Answers (1)

FamousJameous
FamousJameous

Reputation: 1585

I see one problem. Your Radiobuttons are not connected and you have no way to read their status. Create a Variable and use that for all Radiobuttons in the group.

Code from TutorialsPoint:

var = IntVar()
R1 = Radiobutton(root, text="Option 1", variable=var, value=1,
                  command=sel)
R1.pack( anchor = W )

R2 = Radiobutton(root, text="Option 2", variable=var, value=2,
                  command=sel)
R2.pack( anchor = W )

R3 = Radiobutton(root, text="Option 3", variable=var, value=3,
                  command=sel)
R3.pack( anchor = W)

So var represents the status of the button group. Each button is given a different value so that you can tell which is selected.

Note that each group will need it's own IntVar. And make sure to keep a reference to the variable by assigning it to an instance variable (i.e. self.var)

When you want to check the status you use var.get().

Upvotes: 1

Related Questions