所以我是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()
然后导入GUI:
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类,当我尝试创建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编码规则。
但是我希望有人可以在这里帮助我。
问题出在botton的gui代码第4位。