2012-04-04 17 views
7

入力を求めるプロンプトを表示するポップアップメッセージボックスを作成したいとします。私はクラス内にこのメソッドを持っています。私はコードをthis guide by java2sに基づいています。入力フィールドを持つポップアップメッセージボックスの作成

しかし、これでは、top = self.top = Toplevel(parent)は私にとっては機能しません。

私は達成しようとしているものをモックアップしています。

GUI mockup

私のプログラムの構造は次のようになります。

class MainUI: 
    def__int__(self): 
     ... 
     self.initUI() 

    def initUI(self): 
     ....... 
     Popup = Button(self, text="Enter Value", command=self.showPopup) 

    def showPopup(self): 
     #create the popup with an Entry here 
私は、ユーザー入力を受け付けるPythonでメッセージボックスを作成するにはどうすればよい

+0

メインウィンドウ:

Main window

ウィンドウ "私をクリックしてください"あなたは "eを送るnteredデータをメインフォームに戻す "あなたはどういう意味ですか?このデータはウィジェットに表示されますか? –

+0

データを送り返すことによって、私は値がテキストボックスが後でプログラムで操作する変数に格納されていることを意味します。 – Bharat

答えて

11

私はあなたの2つの異なるコードブロックについて少し混乱しています。最初のコードブロックに対処するだけで、メインループに入ることはないので何も起こりません。これを行うには、root.mainloop()に電話する必要があります。これを行うための一般的な方法は...ルートウィジェットにボタンを追加し、

ここで私が何をしたいん願っていますいくつかの基本的なコードだ(d=MyDialog()root.wait_window(d.top)含む)ボタンにコールバック関数をバインドすることです

from Tkinter import * 
import sys 

class popupWindow(object): 
    def __init__(self,master): 
     top=self.top=Toplevel(master) 
     self.l=Label(top,text="Hello World") 
     self.l.pack() 
     self.e=Entry(top) 
     self.e.pack() 
     self.b=Button(top,text='Ok',command=self.cleanup) 
     self.b.pack() 
    def cleanup(self): 
     self.value=self.e.get() 
     self.top.destroy() 

class mainWindow(object): 
    def __init__(self,master): 
     self.master=master 
     self.b=Button(master,text="click me!",command=self.popup) 
     self.b.pack() 
     self.b2=Button(master,text="print value",command=lambda: sys.stdout.write(self.entryValue()+'\n')) 
     self.b2.pack() 

    def popup(self): 
     self.w=popupWindow(self.master) 
     self.b["state"] = "disabled" 
     self.master.wait_window(self.w.top) 
     self.b["state"] = "normal" 

    def entryValue(self): 
     return self.w.value 


if __name__ == "__main__": 
    root=Tk() 
    m=mainWindow(root) 
    root.mainloop() 

popupWindowから値を取得し、それをメインプログラムで使用します(b2に関連付けられたラムダ関数を見てください)。 "私をクリック" が開いている間

click me window

メイン画面:とき

Main window with greyed out "click me"

+0

あなたのコードを試しました。今、 'mainWindow'クラスにポップアップしたフォームにそのエントリに入力された値を渡すにはどうしたらいいですか? 'popupWindow'クラスの' def getVal(self): \t \t return self.e'メソッドがあるかもしれません。 これは 'mainWindow'クラスからどのように呼び出すのですか? – Bharat

+0

@ mgilson、これは私が正確にやりたかったことです。他のクラスから値を取得する方法について少し混乱しました。私はJavaの観点から考えると、クラス変数がプライベート(popupWindowクラスの変数 'value')であると仮定しました。今私は理解しています.. 'entryValue()'メソッドは、私がしたいことをします。 ありがとうございました! – Bharat

+0

'top = self.top = Toplevel(master)'を 'self.top = Toplevel(master)'に使用する理由はありますか? –

関連する問題