2013-12-03 4 views
0

NFL 게임을 시뮬레이트 할 Tkinter로 초보자 프로그램을 만들려고합니다. 나는 Tkinter로 나의 '스코어 보드'를 만들면서 붙어있다. 아래 코드는 한 창에 점수 판의 일부를 가져오고 다른 창에는 두 개의 메뉴 단추를 제공합니다. 왜 이들은 별도의 창문에 있습니까? 사용자가 원하는 팀을 선택할 수 있도록 '자리 비움 팀'과 '홈 팀'옆에 두 개의 메뉴 버튼을 표시하려고합니다. 아직 계산을 걱정하지 않고 그냥 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