2014-02-19 51 views
1

我正在製作一個聊天程序,並決定使用Tkinter作爲界面。Tkinter。在輸入框中按Enter鍵。追加到文本框。怎麼樣?

我想要做的事情是在C#中輕而易舉,但Tkinter對我來說是新的。

基本上我有一個表單控件和一個文本控件。

我想知道如何在用戶按下Enter後將Entry控件中的文本追加到Text控件中。

這裏是我到目前爲止的代碼:

from tkinter import * 

class Application: 

    def hello(self): 
     msg = tkinter.messagebox.askquestion('title','question') 

    def __init__(self, form): 
     form.resizable(0,0) 
     form.minsize(200, 200) 
     form.title('Top Level') 

     # Global Padding pady and padx 
     pad_x = 5 
     pad_y = 5 

     # create a toplevel menu 
     menubar = Menu(form) 
     #command= parameter missing. 
     menubar.add_command(label="Menu1") 
     #command= parameter missing. 
     menubar.add_command(label="Menu2") 
     #command= parameter missing. 
     menubar.add_command(label="Menu3") 

     # display the menu 
     form.config(menu=menubar) 

     # Create controls 

     label1 = Label(form, text="Label1") 
     textbox1 = Entry(form) 
     #command= parameter missing. 
     button1 = Button(form, text='Button1') 

     scrollbar1 = Scrollbar(form) 
     textarea1 = Text(form, width=20, height=10) 

     textarea1.config(yscrollcommand=scrollbar1.set) 
     scrollbar1.config(command=textarea1.yview) 

     textarea1.grid(row=0, column=1, padx=pad_x, pady=pad_y, sticky=W) 
     scrollbar1.grid(row=0, column=2, padx=pad_x, pady=pad_y, sticky=W) 
     textbox1.grid(row=1, column=1, padx=pad_x, pady=pad_y, sticky=W) 
     button1.grid(row=1, column=2, padx=pad_x, pady=pad_y, sticky=W) 

     form.mainloop() 

root = Tk() 
Application(root) 
+0

你有什麼問題?我甚至都沒有看到任何綁定,你甚至試圖處理來自入口小部件的數據。你熟悉'bind'方法嗎? –

+0

[我如何將輸入鍵綁定到tkinter中的函數?](https://stackoverflow.com/questions/16996432/how-do-i-bind-the-enter-key-toa-a-功能在tkinter) –

+0

哇..你知道這已經4年了吧? – ASPiRE

回答

3

讓你在使用一個tkinter.Text盒,它支持.insert方法。讓我們使用它!

def __init__(self,form): 

# Lots of your code is duplicated here, so I'm just highlighting the main parts 

    button1 = Button(form, text='Button1', command = self.addchat) 
    self.textbox = textbox1 # to make it accessible outside your __init__ 
    self.textarea = textarea1 # see above 

    form.bind("<Return>", lambda x: self.addchat()) 
    # this is the magic that makes your enter key do something 

def addchat(self): 
    txt = self.textbox.get() 
    # gets everything in your textbox 
    self.textarea.insert(END,"\n"+txt) 
    # tosses txt into textarea on a new line after the end 
    self.textbox.delete(0,END) # deletes your textbox text 
+0

甜!只是一個快速跟進問題。你將如何阻止用戶將空白條目發佈到文本區域? 'txt = self.textbox.get()'後的 – ASPiRE

+0

,做'如果不是txt:return'。或者,執行'if txt:'並縮進該函數的其餘部分。 –

+1

爲什麼'lambda x:'?你也可以綁定到'self.addchat',然後使用'def addchat(self,event = None):'將'def addchat'改爲包含'event'的可選參數。你的'lambda x:'只是捕獲'event',並用未使用的變量'x'拋出。如果你要堅持拋棄它,至少應該使用更多的Pythonic名稱來顯式忽略'_'的變量。 – ArtOfWarfare