Так что я настоящий новичок в Python и мне нужно немного помощи / совета, как решить эту небольшую проблему, которая у меня есть.
Я пытаюсь создать приложение Python, в котором люди могут общаться в чате, каждый из которыхдругой и использовать Tkinter для его пользовательского интерфейса.
И я пытаюсь связать функцию из класса, который еще не был создан, с элементом tkinter.
Вот класс для клиента:
class Client(object):
def __init__(self, gui):
self.gui = gui
self.socket = socket.socket()
self.ip = 0
self.onserver = False
self.adressabfrage()
self.verbindungsaufbau()
while self.onserver == True:
self.s()
self.r()
def adressabfrage(self):
self.ip = input('IP Adresse des Servers:')
self.portstring = input('Port des Servers:')
self.port = int(self.portstring)
def verbindungsaufbau(self):
self.socket.connect((self.ip, self.port))
self.onserver = True
def s(self, event=None):
self.nachricht = gui.meine_nachricht.get()
gui.meine_nachricht.set("")
self.socket.send(bytes(self.nachricht, 'utf-8'))
if self.nachricht == "{quit}":
self.socket.close()
def r(self):
while True:
try:
self.ze = self.socket.recv(1024)
self.data = self.ze.decode('utf-8')
gui.nachrichten_liste.insert(tkinter.END, self.data)
except OSError:
break
def end(self):
self.socket.close()
И я импортирую графический интерфейс, который находится здесь:
class GUI(object):
def __init__(self):
self.top = tkinter.Tk()
self.top.title("Client")
self.nachrichten_fenster = tkinter.Frame(self.top)
self.meine_nachricht = tkinter.StringVar()
self.meine_nachricht.set("Hier Nachricht eingeben.")
self.scrollbar = tkinter.Scrollbar(self.nachrichten_fenster)
self.nachrichten_liste = tkinter.Listbox(self.nachrichten_fenster, height=15, width=50, yscrollcommand=self.scrollbar.set)
self.scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
self.nachrichten_liste.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
self.nachrichten_liste.pack()
self.nachrichten_fenster.pack()
self.eingabe_feld = tkinter.Entry(self.top, textvariable=self.meine_nachricht)
self.eingabe_feld.bind("<Return>", client.s)
self.eingabe_feld.pack()
self.senden_knopf = tkinter.Button(self.top, text="Senden", command=client.s)
self.senden_knopf.pack()
Проблема в том, что я должен создатьСначала урок GUI, и когда я пытаюсь это сделать, он выдает мне следующее сообщение:
Traceback (most recent call last):
File "C:\Users\prime\Desktop\Client \client(2) - Copy.py", line 67, in <module>
gui = GUI()
File "C:\Users\prime\Desktop\Client\client(2) - Copy.py", line 60, in __init__
self.eingabe_feld.bind("<Return>", client.s)
NameError: name 'client' is not defined
Я знаю, что мой код может быть ужасно организован, и что я не придерживался правил базовогокодирование на python, вероятно.
Но я надеюсь, что кто-нибудь может помочь мне здесь.
Кстати, проблема в коде GUI 4-го от Botton.