2017-04-04 85 views
0

Im试图让我的RadioButton工作并返回一些东西。那么要更清楚一点,我希望它能像这样。用户选择2 Joueur或3 Joueur,然后选择Sans或Avec,然后按Jouer按钮,程序迅速到达下一个窗口,但无法弄清楚。这里的代码即时工作。如何让RadioButton工作

我的程序是一个使用tkinter作为界面的PokerDice游戏。我是法国人,所以这就是为什么变数都是法文的。

感谢您的帮助提前

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()

+0

如果您提供有关当前代码的信息以及您面临的问题,这对其他人会有所帮助。 –

+0

请务必阅读并理解[问]以及如何创建[mcve]。 – ImportanceOfBeingErnest

回答

1

我看到一个问题。您的Radiobutton未连接,您无法读取其状态。创建一个Variable并将其用于组中的所有Radiobutton。从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) 

所以var表示该按钮组的状态。每个按钮都有不同的值,这样您就可以知道选择了哪个按钮。

请注意,每个组将需要它自己的IntVar。并确保通过将该变量分配给一个实例变量(即self.var

保留对该变量的引用当您要检查使用var.get()的状态时。

+0

真棒生病试试吧!快速询问命令= sel做什么? –

+0

这与按钮的'command'参数类似。它为变量的状态发生变化时注册一个回调。你不需要使用它。 – FamousJameous

+0

非常感谢FamousJameous! –