2013-12-03 40 views
0

我想創建一個Tkinter的初學者程序,它將模擬NFL遊戲。我在與Tkinter創建我的'記分牌'時陷入困境。下面的代碼會在一個窗口中顯示部分記分板,並在另一個窗口中顯示兩個菜單按鈕。爲什麼這些在單獨的窗口?我試圖讓兩個菜單按鈕顯示在「客隊」和「主隊」旁邊,以便用戶可以選擇他們想要的隊伍。目前還不擔心calc,只是試圖讓GUI先運行起來。有什麼建議麼?謝謝!Python Tkinter MenuButton

from Tkinter import * 
try: 
    import Tkinter as tk 
except ImportError: 
    import tkinter as tk 

teams = ['Arizona Cardinals','Atlanta Falcons','Baltimore Ravens', 
'Buffalo Bills','Carolina Panthers','Chicago Bears','Cincinnati Bengals', 
'Cleveland Browns','Dallas Cowboys','Denver Broncos','Detroit Lions', 
'Green Bay Packers','Houston Texans','Indianapolis Colts','Jacksonville Jaguars', 
'Kansas City Chiefs','Miami Dolphins','Minnesota Vikings','New England Patriots', 
'New Orleans Saints','New York Giants','New York Jets','Oakland Raiders','Philadelphia Eagles','Pittsburgh Steelers','San Diego Chargers','San Francisco 49ers', 
'Seattle Seahawks','St. Louis Rams','Tampa Bay Buccaneers','Tennessee Titans', 
'Washington Redskins'] 

class App(object): 
    def __init__(self, master): 
     self.frame = Frame(master) 
     self.frame.grid() 

     global root 
     root = tk.Tk() 
     root.geometry("%dx%d+%d+%d" % (330, 80, 200, 150)) 
     root.title("tk.Optionmenu as combobox") 

     global var 
     var = tk.StringVar(root) 
     var.set('Arizona Cardinals') 

     sf = "value is %s" % var.get() 
     root.title(sf) 

     master.title("NFL Simulator") 

     self.lblTeamA = Label(self.frame,text = "Away Team") 
     self.lblTeamA.grid(row = 0, column = 0, sticky = "ew") 
     self.txtTeamA = tk.OptionMenu(root, var, *teams) 
     self.txtTeamA.pack(side='right', padx=10, pady=10) 
     self.txtTeamA.grid(row = 0, column = 1) 

     self.lblTeamB = Label(self.frame,text = "Home Team") 
     self.lblTeamB.grid(row = 1, column = 0, sticky = "ew") 
     self.txtTeamB = tk.OptionMenu(root, var, *teams) 
     self.txtTeamB.pack(side='right', padx=10, pady=10) 
     self.txtTeamB.grid(row = 1, column = 1) 

     self.btnCalc = Button(self.frame,text = "Simulate Game",command = self.calc) 
     self.btnCalc.grid(row = 3, column = 0, columnspan = 2) 

     self.lblScoreAPrompt = Label(self.frame,text = "Away Team Score") 
     self.lblScoreAPrompt.grid(row = 4, column = 0, sticky = "ew") 
     self.lblScoreA = Label(self.frame, bg = "white", anchor = "w") 
     self.lblScoreA.grid(row = 4, column = 1, sticky = "ew") 

     self.lblScoreBPrompt = Label(self.frame,text = "Home Team Score") 
     self.lblScoreBPrompt.grid(row = 5, column = 0, sticky = "ew") 
     self.lblScoreB = Label(self.frame, bg = "white", anchor = "w") 
     self.lblScoreB.grid(row = 5, column = 1, sticky = "ew") 

    def calc(self): 
     TeamA = int(self.txtTeamA.get()) 
     TeamB = int(self.txtTeamB.get()) 

     self.lblTeamA["text"] = random.randint(3,45) 
     self.lblTeamB["text"] = random.randint(3,45) 

def main(): 
    root = Tk() 
    app = App(root) 
    root.mainloop() 

if __name__ == "__main__": 
    main() 

回答

0

你的根是主人。即:

global root 
root = master 

而且OptionMenu應連接到相同的幀等標籤,以顯示他們彼此的旁邊:

self.txtTeamA = tk.OptionMenu(self.frame, var, *teams) 

「我怎樣才能讓他們相互獨立?」

簡而言之,您應該使用兩個不同的變量來存儲選定的選項。在你的代碼中,它們都與var相關聯,因此在更改一個OptionMenu時會更改var,這會更改另一個OptionMenu

varA = tk.StringVar(root) 
varA.set('Arizona Cardinals') 

varB = tk.StringVar(root) 
varB.set('Baltimore Ravens') 

self.txtTeamA = tk.OptionMenu(root, varA, *teams) 

self.txtTeamB = tk.OptionMenu(root, varB, *teams) 
+0

@russherm我編輯了我的答案,展示如何使它們獨立。 – sPaz