2016-09-25 7 views
0

昨夜、私はの代わりにpygamepygameを使ってゲームを作っていました。 )。python tkinterの複数のウィンドウでバックグラウンドを変更しようとしたときにRecursionErrorが発生する

私はユーザーにRGB値を推測し、その精度を計算させたいと思っています。しかし、コードを実行するたびに、startgame機能中にRecursionErrorが表示され、色が変わることはありません。なぜ私は混乱しています。

from tkinter import * 
import random 

class multiWindow(Tk): 
def __init__(self): 

    # ******* CREATE WINDOWS ******* 

    window1 = Tk() 
    window2 = Tk() 
    window3 = Tk() 

    # ******* WINDOW DIMENSIONS ******* 

    windowH = 100 
    windowW = 250 

    # ******* SCREEN RES ******* 

    screenW = 1366-windowW 
    screenH = 768-windowH 

    # ******* COORDINATES OF WINDOWS ******* 
    window1.geometry('%dx%d+%d+%d' % (windowW,windowH,screenW/6,screenH/3)) 
    window2.geometry('%dx%d+%d+%d' % (windowW,windowH,screenW/2,screenH/3)) 
    window3.geometry('%dx%d+%d+%d' % (windowW,windowH,screenW/(6/5),screenH/3)) 

    # ******* WINDOW TITLES ******* 
    window1.title("Color1") 
    window2.title("Color2") 
    window3.title("Color3") 

    # ******** BUTTON START ******* 
    buttonStart = Button(window1,text="Start Game", command=lambda: self.startGame()) 
    buttonStart.pack() 


    # ******* OPEN WINDOWS ******* 
    window1.mainloop() 
    window2.mainloop() 
    window3.mainloop() 




# ******** PRODUCE RANDOM COLOR ******** 
def randomRGB(self): 
    return random.randint(0,255) 


def guessRed(self,window): 
    while True: 
     try: 
      print("I want you to guess the RGB values of the colors in the windows above.") 
      print("Guess the red value of the window displaying ",window) 
      guess = int(input()) 

      if guess < 0 or guess > 255: 
       raise 
      else: 
       return guess 
       break 
     except: 
      print("Error") 

def startGame(self): 
    # ******** DETERMINE COLOR VALUES ******* 
    colorVal = [0,0,0,0,0,0,0,0,0] 

    for x in range(0,len(colorVal)): 
     colorVal[x] = self.randomRGB() 

    # ******* GIVE WINDOWS COLOR ******* 
    self.window1.configure(background='#%02x%02x%02x'%(colorVal[0],colorVal[1],colorVal[2],)) 
    self.window2.configure(background='#%02x%02x%02x'%(colorVal[3],colorVal[4],colorVal[5],)) 
    self.window3.configure(background='#%02x%02x%02x'%(colorVal[6],colorVal[7],colorVal[8],)) 

multiWindow = multiWindow() 
print("This comes after multiwindow class")   

tkinterではあまりうまくいきません。ちょうど2日前にそれについて読んで始めましたが、私はこの問題が私の把握よりもtkinterの私の把握とはあまり関係がないと感じています。

すべてのヘルプは大歓迎です

+0

'multiWindow = multiWindow()'クラスと同じ名前の変数は使用しないでください。これはあなたの特定の問題とは関係ないかもしれませんが、それは確かに_a_問題です。 –

答えて

0

あなたのプログラムがTkの正確に一つのインスタンスを持っている必要があり、あなたは正確に一度mainloopを呼び出す必要があります。追加のウィンドウが必要な場合は、Toplevelのインスタンスを作成します。 Tkの複数のインスタンスがある場合、期待どおりに動作するものはありません。

また、guessRedの無限ループとinputの呼び出しを削除する必要があります。 GUIはコンソールから入力されるべきではありません。

他の問題とは無関係の

、あなたは以下でlambdaを使用する必要はありません。この場合

Button(window1,text="Start Game", command=lambda: self.startGame()) 

lambdaは、コードがもう少し複雑にする以外の目的を達成しません。代わりに、関数への参照を渡してください:

Button(window1,text="Start Game", command=self.startGame) 
関連する問題