Seite 1 von 1

TCP Server + GUI in Python 1 Programm

Verfasst: Dienstag 12. Juni 2018, 16:17
von Plotus92
Moin Python Experten^^,

habe eine kurze Frage. Habe in Python einen TCP Server geschrieben und ein GUI. Im Moment sind es 2 separate Programme. Möchte diese nun gerne zusammenführe. Nur leider futzt das nicht so wie gedacht. Entweder startet der Server und sobald dieser geschlossen wird das GUI oder umgekehrt. Das GUI wurde mit Tkinter geschrieben. Würde mich über Lösungsansätze freuen ^^

Der Server :

import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = socket.gethostbyname(socket.gethostname())
port = 1234
address = (ip,port)
server.bind(address)
server.listen(1)
print ("[*] Looking for Connection ",ip,":",port)
client,addr = server.accept()
print ("[*] Connection from ",addr[0],":",addr[1])
while True:
data = client.recv(1024)
print ("[*] Received",data," from client")
print ("[*] Processing data")
if(data==b"Hello Server"):
client.send(b"Hello client")
print ("Processing done.\n[*] Replay sent")
elif(data==b"disconnect"):
client.send(b"Goodbye")
client.close()
break
else:
client.send(b"Invalid data")
print ("Processing Invalid data.\n[*] Replay sent")

Das GUI :

from tkinter import*
import random
import time
import tkinter as tk

#Window Construction

root=Tk()
root.geometry("400x200")
root.title("Light v.1")
root.resizable(False, False)

#Variable Section

BG = Frame(root,width=400,height=200)
BG.pack(side=TOP)

Panel1 = Frame(root,width=200,height=100)
Panel1.pack(side=LEFT)

Info=Label(BG,font=('arial',20,'bold'),text="Time Settings",fg="black",bd=10,anchor='w')
Info.grid(row=0,column=0)

#Clock Section

time_one=''
Info_Time=Label(BG,font=('arial',20,'bold'),fg="green",bd=10,anchor='w')
Info_Time.grid(row=1,column=0)

time_one=''
def update_Time():
global time_one
time_two=time.strftime('%H:%M:%S')
# Update String for Time
if time_two != time_one:
time_one = time_two
Info_Time.config(text=time_two)
#Calling every 200ms
Info_Time.after(200, update_Time)
update_Time()

#Entry Section

Display1=Entry(Panel1,font=('comic sans',10,'bold'))
Display1.grid(row=1,column=1)
Display2=Entry(Panel1,font=('arial',10,'bold'))
Display2.grid(row=1,column=2)
Display3=Entry(Panel1,font=('arial',10,'bold'))
Display3.grid(row=2,column=1)
Display4=Entry(Panel1,font=('arial',10,'bold'))
Display4.grid(row=2,column=2)

#Text Section

Text1=Label(Panel1,text="Von").grid(row=1,column=0)
Text2=Label(Panel1,text="Bis").grid(row=2,column=0)

Text_Min=Label(Panel1,text="Stunden").grid(row=0,column=1)
Text_Min=Label(Panel1,text="Minuten").grid(row=0,column=2)



#Button Section
def getInput():
A=int(Display1.get())
B=Display2.get()
C=Display3.get()
D=Display4.get()
print(A,B,C,D)

global operator
operator=[A,B,C,D]

b1= Button(BG,text="Apply",command=getInput).grid(row=3)


root.mainloop()

Re: TCP Server + GUI in Python 1 Programm

Verfasst: Dienstag 12. Juni 2018, 19:00
von wuf
Hi Plotus92

Könntest du dein Skript bitte nochmals in den Tags für Python Skripte zeigen?

Gruss wuf ;-)

Re: TCP Server + GUI in Python 1 Programm

Verfasst: Dienstag 12. Juni 2018, 19:24
von Plotus92
wuf hat geschrieben: Dienstag 12. Juni 2018, 19:00 Hi Plotus92

Könntest du dein Skript bitte nochmals in den Tags für Python Skripte zeigen?

Gruss wuf ;-)
Was meinst du genau?

Re: TCP Server + GUI in Python 1 Programm

Verfasst: Dienstag 12. Juni 2018, 19:39
von wuf
Hi Plotus92

Beim Forum Editor musst du die Schaltfläche Vollständiger Editor aktivieren. Dann siehst du ganz rechts oberhalb des Editorfensters die Bezeichnung Python. Diese Bezeichnung musst du anklicken. Dann wird dir im Editor automatisch die Tags für die Einbettung deines Python Skripts platziert. Idiotischerweise kann ich dir diese Tags hier nicht in Worte zeigen da diese für den Editor reservierte Worte enthalten. Dein Skript wird dann in diesem Fenstertyp mit korrekten Einrückungen angezeigt.

Code: Alles auswählen

Hier steht dann dein Skript
Gruss wuf ;-)

Re: TCP Server + GUI in Python 1 Programm

Verfasst: Dienstag 12. Juni 2018, 19:59
von Sirius3
Du brauchst einen eigenen Thread, in dem der Server läuft und die GUI läuft im Hauptthread.

Dein Server ist fehlerhaft. recv(1024) liefert 1 bis 1024 Bytes zurück. Dass da mal "Hello Server" am Stück und nicht in mehreren recv-Aufrufen zurückkommt ist reiner Zufall. Ebenso sendet send nicht unbedingt alles, dafür gibt es sendall. Den eigenen Hostnamen an bind zu binden führt dazu, dass man nur über ein Gateway auf den Server zugreifen kann. Normalerweise nimmt man Any-IP 0.0.0.0. if und elif sind keine Funktionen, die Klammern also unnötig.