在类创建之前使用函数的GUI类

时间:2018-10-21 21:49:59

标签: python function class user-interface tkinter

所以我是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位。

0 个答案:

没有答案