2016-06-27 17 views
0

私はPythonプログラミングに新しく、自分自身を解決できないような基本的な質問があります。誰かがこの問題を解明できることを願っています!Python Tk()Buttonコマンドが完全に機能していない

ユーザーと(ランダム)コンピューターの間で基本的なロック、ペーパー、はさみゲームを実行する.pyファイルを作成しました。これはtk()経由のGUIを使用しています。

次に、別の.pyファイルを作成しました。今回は、全体のメニューGUIを作成しました。そこからRock、Paper、Scissorsのゲームを実行することができます。私はこれを作成することができますtk()罰金、RPSゲームを選択するボタンは、ゲームがロードされますが、今回は全く動作しません!私はボタンを押すことができますが、ゲームを進めません。

ここgame.pyのための私のコードは次のとおりです。

from tkinter import * 
from tkinter.ttk import * 
import random 

def gui(): 
    <game code goes in here, including other functions> 

root=Tk() 
root.title("Rock, Paper, Scissors") 
# more code to define what this looks like 
# including a Frame, buttons, labels, etc> 

if __name__=='__main__': 
    gui() 

そして私は、全体的なゲームメニュー、menu.py作成:誰もが何かを明らかに見ることができる場合、私に知らせてください

from tkinter import * 
from tkinter.ttk import * 
import random 
import game 

main=Tk() 
main.title("J's games") 

mainframe=Frame(main,height=200,width=500) 
mainframe.pack_propagate(0) 
mainframe.pack(padx=5,pady=5) 

intro=Label(mainframe, 
    text="""Welcome to J's Games. Please make your (RPS) choice.""") 
intro.pack(side=TOP) 

rps_button=Button(mainframe, text="Rock,Paper,Scissors", command=game.gui) 
rps_button.pack() 

test_button=Button(mainframe,text="Test Button") 
test_button.pack() 

exit_button=Button(mainframe,text="Quit", command=main.destroy) 
exit_button.pack(side=BOTTOM) 

main.mainloop() 

を。なぜ私はそれが別の機能(ボタンコマンド)に組み込まれているのか分かりません。私はIDLEのデバッグを試みましたが、それは私の上でフリーズしているようです!

+1

1つの問題は、2つのルートウィンドウ(つまり、 'Tk()'を2回呼び出すことです)。 tkinterプログラムはちょうど1つのルートウィンドウを持つべきです。 –

+0

書込みボックスにコードを1度だけインデントしてください。書式設定の後に一杯になるので、切り取りと貼り付けができます。 –

答えて

0

特定のゲームを選択したときにメインウィンドウを残しておきたいとします。これは、ゲームが独立したフレームで行われることを意味します。最初は個別のToplevelになります。あなたのRPSファイルは次のようなもの、

from tkinter import * 
from tkinter.ttk import * 
import random 

class RPS(Toplevel): 
    def __init__(self, parent, title): 
     Toplevel.__init__(parent) 
     self.title(title) 
    #game code goes in here, including other functions 

# more code to define what this looks like 
# including a Frame, buttons, labels, etc> 

if __name__=='__main__': 
    root=Tk() 
    root.withdraw() 
    RPS(title = "Rock, Paper, Scissors") 
    root.mainloop() 

この方法を変更し、ファイルをインポートして、第2のルートとメインループを作成しません。

一度に1つのゲームしか実行しない場合は、代わりに2つのペインでペインウィンドウを使用できます。それはタートルネモだ。コードは酷いです。 メイン。次に、フレームからRPSを取得し、それを第2ペインにパックします。

関連する問題