Usernamen anzeigen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

hi
ich würde in meinem code noch gern den usernamen in einem label anzeigen lassen.
ich bekomm das aber nicht richtig hin.
könnte mir bitte jemand helfen?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import Tkinter
import threading
import socket
import SocketServer
import threading
import sys
import json

clientname = None

class MyTCPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        global clientname
        self.request.send("Der Server")
        #self. = self.request.recv(1024)
        self.username = str("Der Benutzer")
        clientname.set_user(self.username)

class Start_Server():

    def set_user(self, username):
        # der username kommt hier an
        print("Hauptfenster hat den usernamen '%s' bekommen" % username)

    def main(self):

        backwin = Tkinter.Tk()
        backwin.title('DMD-DATA.soft')
        backwin.state('zoomed')
        backwin.configure(background='black')

        start_Server = Tkinter.StringVar()
        l_sf1 = Tkinter.Label(backwin,textvariable=(start_Server),font=('Arial', 8, 'bold'), height=3, width=25,
         fg="#000000000",justify='left')
        l_sf1.place(relx=.06, rely=.965, anchor="c")

        ########################################################################
        #
        # hier moechte ich gern den usernamen anzeigen lassen
        #
        start_Client = Tkinter.StringVar()
        l_sf2 = Tkinter.Label(backwin,textvariable=(start_Client),font=('Arial', 8, 'bold'), height=3, width=35,
         fg="#000000000",justify='left')
        l_sf2.place(relx=.2, rely=.965, anchor="c")
        #start_Client.set(???)
        ########################################################################

        get_IP = [TCP_IP for TCP_IP in socket.gethostbyname_ex(socket.gethostname())[2] if not TCP_IP.startswith("127.")][:1]
        if TCP_IP.startswith("127."):
            start_Server.set("Server nicht gestartet...\nKEIN W-LAN VERFÜGBAR!")
            start_Client.set("Um den Server starten zu können,\nmuß eine W-LAN-Verbindung vorliegen!")
        else:
            TCP_PORT = 9090
            start_Server.set("Server gestartet...\nIP-Adresse: {}".format(TCP_IP))
            server = SocketServer.TCPServer((TCP_IP, TCP_PORT), MyTCPHandler)

            thread = threading.Thread(target=server.serve_forever)
            thread.start()

        b1 = Tkinter.Button(backwin, text=("\nSTART\n"), font=('Arial', 10, 'bold'), width=20,
         relief="raised", borderwidth=3, fg='#000000000', justify='center',command=lambda:self.haupt_Start(backwin))
        b1.place(relx=.51, rely=.3, anchor="c")

        def quit(backwin):
            try:
                server.shutdown()
                server.server_close()
            except:
                pass
            backwin.destroy()
            sys.exit()

        b2 = Tkinter.Button(backwin, text=("\nBEENDEN\n"), font=('Arial', 10, 'bold'), width=20,
         relief="raised", borderwidth=3, fg='#000000000', justify='center',command=lambda:quit(backwin))
        b2.place(relx=.51, rely=.45, anchor="c")

        backwin.protocol("WM_DELETE_WINDOW", quit)
        backwin.mainloop()


if __name__ == '__main__':
    hintergrund = Start_Server()
    clientname=hintergrund
    hintergrund.main()
Zuletzt geändert von Anonymous am Dienstag 20. Dezember 2016, 13:41, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD-OL: jedes mal sieht Dein Code wieder anders aus, nur der fehlerhafte Schrott bleibt gleich. `get_IP` wird jetzt gar nicht mehr benutzt. Statt dessen die interne TCP_IP-Variable, die sehr wohl mit "127." anfangen kann, obwohl Dein WLAN aktiv ist. Das ist einfach nur falsch und völlig unnötig.

Ich weiß nicht, wie oft Dir schon gesagt wurde, dass verschachtelte Funktionen und global in einem ordentlichen Programm nichts verloren haben. BaseRequestHandler hat z.B. ein server-Attribut, mit dem man auf übergeordnete Variablen zugreifen kann. Start_Server ist keine Klasse, das ist nur eine main-Funktion.
Antworten