2017-02-06 4 views
1

Ich habe versucht, ein Chat-Fenster zu erstellen, und es funktioniert nicht richtig. Jedes Mal, wenn ich die Nachricht eingebe, taucht sie auf und vergrößert das Fenster. Was soll ich machen?Wie erstelle ich ein Chat-Fenster mit 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

Sie erstellen jedes Mal ein neues "Label", wenn Sie die Eingabetaste drücken. Ist das das, was Sie wollen? Ich würde vorschlagen, stattdessen ein 'Text'-Widget zu verwenden. Zusätzlich gibt 'return' hier nichts, da Sie keinen Rückgabewert erhalten können. –

Antwort

2

Sie fügen eine Beschriftung jedes Mal, wenn Sie die Eingabetaste drücken, versuchen, Nachrichten in einem Text Widget zeigt:

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

Sie können das Relief des Text-Widgets auch auf "flach" setzen und es so einstellen, dass es nur so aussieht, dass es eher wie eine Beschriftung aussieht. –

+0

und wie füge ich eine Bildlaufleiste hinzu? – shahar

+0

@shahar Sie sollten eine Frage stellen (von oben rechts), um im Detail zu erklären. Vielleicht hilft Ihnen das http://StackOverflow.com/Questions/16188420/Python-Tkinter-Scrollbar-for-Rahmen – Zety

2

Ihr Problem ist, dass die Etiketten Sie haben window als Eltern schaffen statt frame, so sie sind unter frame, nicht verpackt im Inneren:

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() 

Aber wenn Sie möchten, dass Ihre Nachrichten in der Lage sein blättern , Ich stimme Steven Summers und WaIR zu, sollten Sie ein Text-Widget verwenden.