2017-02-06 62 views
1

チャットウィンドウを作成しようとしましたが、正しく動作しません。私がメッセージを入力するたびに、それがポップアップし、ウィンドウが増加します。私は何をすべきか?tkinterでチャットウィンドウを作成するには?

from Tkinter import * 

window = Tk() 

input_user = StringVar() 
input_field = Entry(window, text=input_user) 
input_field.pack(side=BOTTOM, fill=X) 

def Enter_pressed(event): 
    input_get = input_field.get() 
    print(input_get) 
    label = Label(window, text=input_get) 
    input_user.set('') 
    label.pack() 
    return "break" 

frame = Frame(window, width=300, height=300) 
input_field.bind("<Return>", Enter_pressed) 
frame.pack() 

window.mainloop() 
+0

Enterを押すたびに新しいラベルを作成していますが、これは何ですか?代わりに 'Text'ウィジェットを使うことをお勧めします。さらに、戻り値を得ることができないので、 'return'はここで何もしません。 –

答えて

2

あなたはTextウィジェットでメッセージを表示しようと、ラベルにEnterキーを押すたびに追加されます。

from Tkinter import * 

window = Tk() 

messages = Text(window) 
messages.pack() 

input_user = StringVar() 
input_field = Entry(window, text=input_user) 
input_field.pack(side=BOTTOM, fill=X) 

def Enter_pressed(event): 
    input_get = input_field.get() 
    print(input_get) 
    messages.insert(INSERT, '%s\n' % input_get) 
    # label = Label(window, text=input_get) 
    input_user.set('') 
    # label.pack() 
    return "break" 

frame = Frame(window) # , width=300, height=300) 
input_field.bind("<Return>", Enter_pressed) 
frame.pack() 

window.mainloop() 
+0

テキストウィジェットの逃げをフラットに設定して、ラベルのように見えるように読むだけにすることもできます。 –

+0

と私はどのようにスクロールバーを追加するのですか? – shahar

+0

@shahar質問を(右上のコーナーから)詳細を説明する必要があります。これはあなたに役立ちますhttp://stackoverflow.com/questions/16188420/python-tkinter-scrollbar-for-frame – Zety

2

あなたの問題は、あなたが作成したラベルは、そう、代わりにframeの親としてwindowを持っているということです彼らはframe、ない内側の下に梱包されています

from Tkinter import * 

window = Tk() 

input_user = StringVar() 
input_field = Entry(window, text=input_user) 
input_field.pack(side=BOTTOM, fill=X) 

def enter_pressed(event): 
    input_get = input_field.get() 
    print(input_get) 
    label = Label(frame, text=input_get) 
    input_user.set('') 
    label.pack() 
    return "break" 

frame = Frame(window, width=300, height=300) 
frame.pack_propagate(False) # prevent frame to resize to the labels size 
input_field.bind("<Return>", enter_pressed) 
frame.pack() 

window.mainloop() 

しかし、あなたはあなたのメッセージをスクロールできるようにしたい場合私はSteven SummersとWaIRに同意します。あなたはTextウィジェットを使うべきです。

関連する問題