2016-09-30 14 views
0

私はPythonで関数を使って遊んでいますが、Tkinterを使ってJOptionPaneをJavaから実行できます...私はPython 3.xを実行していますが、少し問題があります関数を使って変数を変更できないPython

from tkinter import * 

def showMessageDialog(text): 
    text = text 
    janela = Tk() 
    janela.geometry("400x100") 
    janela["bg"] = "grey" 
    janela.title(" ") 
    lb = Label(janela, text=str(text)) 
    lb.place(x=200,y=50) 
    janela.mainloop() 


def showInputDialog(text): 
    x = " " 
    def botaoClicado(): 
      x = ed.get() 
      janela.destroy() 
      return x 

    text = str(text) 
    janela = Tk() 
    janela.geometry("400x100") 
    janela["bg"] = "grey" 
    janela.title(" ") 

    lb = Label(janela, text=str(text)) 
    lb.place(x=120,y=10) 

    bt = Button(janela, width=10, text="Ok", command=botaoClicado) 
    bt.place(x=120,y=65) 

    ed = Entry(janela) 
    ed.place(x=120,y=35) 

    janela.mainloop() 

    return x 

x=0 
x = showInputDialog("Insira seu nome!") 

私はポルトガル語ですみませますが、私はあなたが私を助けることができると思います。私の問題は次のとおりです:

ボタンをクリックすると、エントリが他の機能に返されません。私はお詫びしますが、私はどのようにしてより良い説明ができるのか分かりません。

+0

グローバル変数xを設定する場合は、xを変更する関数の先頭に 'global x'を追加することができます。または 'botInClicado'が' showInputDialog'の外側スコープの変数を変更したい場合は 'nonlocal x'をその定義に追加することができます。ユーザーがボタンをクリックすると、コールバックの戻り値は何も使用されません。 –

+0

それは、ありがとう! xD –

答えて

0

すべてのtkinterウィンドウが閉じるまで、mainloopの呼び出しは停止しません。したがって、を呼び出すと、関数がハングアップします。メインスレッド(スクリプトの一番下)でmainloopを呼び出し、コールバックを使用して入力を処理するのがベストプラクティスです。たとえば、メッセージダイアログボックスで応答が取得されると、応答を処理する関数を呼び出すことができます。

+1

私はプログラムがハングアップするとは言わないでしょう、ちょうどボタンが押されるまで待つGUIイベントループを開始します。それは 'botaoClicado'を呼びます。これはtkウィンドウを閉じ、残りのプログラムは持続する。 –

関連する問題