2017-04-04 115 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! –