2013-12-03 37 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