2017-03-21 21 views
0

Python Tkinterを使用しています。入力テキストボックスとOKボタンがあります。今私はボタンのロジックを実装している、ユーザー入力= 1、OKボタンを押した後、新しいウィンドウが開きます。今度はOKボタンを押すのではなく、キーボードから「Enter key」を入力して新しいウィンドウを開きたいのです。Tkinter PythonでEnterキーを使用して、新しいウィンドウを開きます。

私は進行方法がわかりません。

from Tkinter import * 


def UserInput(): 
global UI_MainForm 
UI_MainForm = Tk() 

UI_MainForm.resizable(1,0) 
UI_MainForm.geometry("300x450+0+0") 
UI_MainForm.title("ChCM 1.25 Diagnostics Main Menu") 

    # LabelFrame to add all the Menu menu Display items 
labelframe = LabelFrame(UI_MainForm,text="Please select the below options:",width=300, height=100,bd = 2) 
labelframe.pack(fill="both") 
labelframe.config(relief=RIDGE) 

    # LabelFrame to add the User input text box and buttons 
labelframe1 = LabelFrame(UI_MainForm,text="User Input:",width=300, height=100,bd = 2) 
labelframe1.pack(pady=8,fill="both") 
labelframe1.config(relief=FLAT) 


    #Entry the text and display 
global entrytext 
entrytext = StringVar() 
entry = Entry(labelframe1,textvariable=entrytext,width=35) 
entry.pack(padx = 1, pady = 5) 


MainMenuDisplay = [{"ID": 1,"Description": "Display Data1"}, 
        {"ID": 2,"Description": "Display Data2"}] 


for menu in MainMenuDisplay: 
     temp_text = '{0}. {1}'.format(menu['ID'], menu['Description']) 
     Label(labelframe, text=temp_text).pack(anchor = W) 


ButtonOK = Button(labelframe1, text = "OK", command =OnButtonOK, width =15) 
ButtonOK.pack(side = LEFT, padx = 15, pady = 15) 


UI_MainForm.mainloop() 
return; 

    def OnButtonOK(): 
    UI_MainForm.withdraw() 
    Input = int(entrytext.get()) 


if (Input == 1): 
    Data1_Menu_Display(); 
elif (Input == 2): 
    Data2_Menu_Display(); 
else: 
    print "The Input is not valid" 

return; 

def Data1_Menu_Display(): 
    # self.withdraw() 
global top 
top = Toplevel(UI_MainForm) 
top.geometry("300x450+0+0")  
top.title("Display Data1") 
return;  

def Data2_Menu_Display(): 
    # self.withdraw() 
global top 
top = Toplevel(UI_MainForm) 
top.geometry("300x450+0+0") 

top.title("Display Data1") 

return;  
def Main(): 

UserInput() 

Main() 
+0

最小、完全、テスト可能な例を示してください。そして再フォーマットしてください。 – abccd

+0

''イベントを 'root'ウィジェットにバインドするだけです。もっと[ここ](http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm)! – CommonSense

+0

私はバインドを使って知っていますが、自分のコードで実装する方法は分かりません。 –

答えて

2

このコードを試してみてください。

import tkinter 

class Application: 
    def __init__(self, master): 
     self.master = master 
     self.master.title('GUI') 
     self.master.geometry('200x100') 
     self.label = tkinter.Label(master, text='Enter some text:') 
     self.label.pack() 
     self.entry = tkinter.Entry(master) 
     self.entry.bind('<Return>', self.some_action) 
     self.entry.pack() 
     self.button = tkinter.Button(master, text='Ok', command=self.some_action) 
     self.button.pack() 
     self.output = tkinter.Label(master, text='Your text is: ') 
     self.output.pack() 

    def some_action(self, event=None): 
     """ It's very important to remember that if you use the 'command' argument 
      to attach a handler function to a button, then the function cannot 
      take any arguments. On the other hand, if you use bind() to attach 
      a handler function, the function must take one argument. 
      To avoid this conflict, use default argument 'event=None'. """ 
     self.output.config(text='Your text is: ' + self.entry.get()) 

root = tkinter.Tk() 
app = Application(root) 
root.mainloop() 

それはあなたがボタンにハンドラ関数を添付する「コマンド」引数を使用している場合、その関数は引数を取ることができないことを覚えておくことは非常に重要です。一方、bind()を使用してハンドラ関数をアタッチする場合、関数は1つの引数を取る必要があります。この競合を回避するには、関数内でデフォルト引数 'event = None'を使用します。

関連する問題