Tkinter ile enter tuşunu butona ekleyemiyorum

Enter tuşuna bastığımda mesajımı göndermek istiyorum.Bir türlü yapamadım.

yourMessage = Entry(pencere, width=50)
yourMessage.insert(0, 'Name')
yourMessage.grid(row=1, column=0, padx=10, pady=10)
yourMessage.focus()
yourMessage.selection_range(0, END)

def sendMessage():
    clientMessage = yourMessage.get()
    messages.insert(END, '\n' + 'You: ' + clientMessage)
    client.send(clientMessage.encode('utf8'))
    yourMessage.delete(0, END)

messageSendButton = Button(pencere, text='Send', width=20, command=sendMessage)
messageSendButton.grid(row=2, column=0, padx=10, pady=10)

def recvMessage():
    while True:
        serverMessage = client.recv(1024).decode('utf8')
        messages.insert(END, '\n' + serverMessage)

recvThread = Thread(target=recvMessage)
recvThread.daemon = True
recvThread.start()

pencere.mainloop()

tkinter’da bind adında bir method olmalı.
ilk parametresi string veri türünde ilgili olayı gerçekleştirecek belirteç, ikinci parametre de bu olayı gerçekleştirecek bir fonksiyon alıyor.

Atıyorum:
entry.bind("<return>",lambda e: fonksiyon(e))

def fonksiyon(event):
   entry.delete() # methodun adı yanlış olabilir
   ...            #diğer işlemler

Bu şekilde kullanıp kodunuzu düzenleyin test edin.

import satırları eksik, ilk satırdan başlayarak kodu tekrar gönderirmisin.


def sendMessage(event=None):
    clientMessage = yourMessage.get()
    messages.insert(END, '\n' + 'You: ' + clientMessage)
    client.send(clientMessage.encode('utf8'))
    yourMessage.delete(0, END)


def recvMessage():
    while True:
        serverMessage = client.recv(1024).decode('utf8')
        messages.insert(END, '\n' + serverMessage)

recvThread = Thread(target=recvMessage)
recvThread.daemon = True
recvThread.start()

yourMessage = Entry(pencere, width=50)
yourMessage.insert(0, 'Name')
yourMessage.grid(row=1, column=0, padx=10, pady=10)
yourMessage.focus()
yourMessage.selection_range(0, END)
yourMessage.bind("<Return>", sendMessage)

messageSendButton = Button(pencere, text='Send', width=20, command=sendMessage)
messageSendButton.grid(row=2, column=0, padx=10, pady=10)

pencere.mainloop()

bu event yourmessage isimli entry içine yazı yazıldıktan sonra entere basmak için ayarlandı.
entry ve buton kısmını aşağı aldım yoksa hata verecekti. kodun tamamı olmadığı için deneme şansım olmadı.

1 Beğeni

Ben size client.py dosyasını atıyım çünkü dediğinizi denedim olmadı.

from socket import *
from threading import *
from tkinter import *
from tkinter import scrolledtext

client = socket(AF_INET, SOCK_STREAM)

HOST = '192.168.1.109'
PORT = 5008
client.connect((HOST, PORT))

pencere = Tk()
pencere.title('CHAT : ' + HOST + ':' + str(PORT))

messages = Text(pencere, width=50)
messages.grid(row=0, column=0, padx=10, pady=10)

yourMessage = Entry(pencere, width=50)
yourMessage.insert(0, 'Enter Name')
yourMessage.grid(row=1, column=0, padx=10, pady=10)
yourMessage.focus()
yourMessage.selection_range(0, END)

def sendMessage():
    clientMessage = yourMessage.get()
    messages.insert(END, '\n' + 'You: ' + clientMessage)
    client.send(clientMessage.encode('utf8'))
    yourMessage.delete(0, END)


messageSendButton = Button(pencere, text='Send', width=20, command=sendMessage)
messageSendButton.grid(row=2, column=0, padx=10, pady=10)

def recvMessage():
    while True:
        serverMessage = client.recv(1024).decode('utf8')
        messages.insert(END, '\n' + serverMessage)

recvThread = Thread(target=recvMessage)
recvThread.daemon = True
recvThread.start()

pencere.mainloop()
from tkinter import *
from socket import *
from threading import *

client = socket(AF_INET, SOCK_STREAM)

HOST = '192.168.1.109'
PORT = 5008

client.connect((HOST, PORT))

pencere = Tk()
pencere.title(f"CHAT:{HOST}:{str(PORT)}")


def sendMessage(event=None):
    clientMessage = yourMessage.get()
    messages.insert(END, '\n' + 'You: ' + clientMessage)
    client.send(clientMessage.encode('utf-8'))
    yourMessage.delete(0, END)


def recvMessage():
    while True:
        serverMessage = client.recv(1024).decode('utf-8')
        messages.insert(END, '\n' + serverMessage)


recvThread = Thread(target=recvMessage)
recvThread.daemon = True
recvThread.start()

messages = Text(pencere, width=50)
messages.grid(row=0, column=0, padx=10, pady=10)

yourMessage = Entry(pencere, width=50)
yourMessage.insert(0, 'Enter Name')
yourMessage.grid(row=1, column=0, padx=10, pady=10)
yourMessage.focus()
yourMessage.selection_range(0, END)
yourMessage.bind("<Return>", sendMessage)

messageSendButton = Button(pencere, text='Send', width=20, command=sendMessage)
messageSendButton.grid(row=2, column=0, padx=10, pady=10)

pencere.mainloop()

Buraya bakabiIirsin:

Çok teşekkürler çalıştı :slight_smile:

Bir şey daha sormak istiyorum.Chat pneceresinin içine de yazı yazılıyor bunu nasıl kapatabilirim acaba?