GUI класс с использованием функций перед созданием класса - PullRequest
0 голосов
/ 22 октября 2018

Так что я настоящий новичок в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...