【问题标题】:How to create a chat window with tkinter?如何使用 tkinter 创建聊天窗口?
【发布时间】:2017-02-06 07:27:27
【问题描述】:

我尝试创建一个聊天窗口,但它无法正常工作。每次我输入消息时,它都会弹出并增加窗口。我该怎么办?

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

【问题讨论】:

  • 您每次按回车时都会创建一个新的Label,这是您想要的吗?我建议改用Text 小部件。此外,return 在这里什么都不做,因为您无法获得返回值。

标签: python tkinter


【解决方案1】:

您每次按 Enter 时都会添加一个标签,请尝试在 Text 小部件中显示消息:

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

【讨论】:

  • 您还可以将 Text 小部件浮雕设置为 flat 并使其只读,使其看起来更像一个标签。
  • 如何添加滚动条?
  • @shahar 你应该问一个问题(从右上角)来详细解释。也许这对你有帮助stackoverflow.com/questions/16188420/…
【解决方案2】:

你的问题是你创建的标签有window作为父标签而不是frame,所以它们被包装在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 的观点,您应该使用文本小部件。

【讨论】:

    【解决方案3】:

    尝试使用更简单的方法(Python 3.7.3)

    from tkinter import *
    root = Tk()
    root.resizable(height = False, width = False)
    root.title('Chat Window Thingy')
    
    l1 = Label(root, text = 'Your Text Here',fg='green').pack()
    e1 = Entry(root, text = 'Your text here').pack()
    
    root.mainloop()
    

    我是一名 10 年级计算机科学专业的学生,​​所以请保持温和,但我希望这能解决你的问题 :)

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2016-12-08
      • 2022-01-05
      相关资源
      最近更新 更多