Python 3.x 窗口tkinter不';当与另一个设备连接时,不显示 我想连接两台计算机以制作一种messenger,但我想使用tkinter,以拥有windows,并使用按钮和其他小部件来创建界面 我有两个程序,一个是客户端,另一个是服务器。 对于客户端,它可以工作:窗口显示,我可以发送消息 对于服务器,不显示窗口 客户端程序:
这里是服务器程序:Python 3.x 窗口tkinter不';当与另一个设备连接时,不显示 我想连接两台计算机以制作一种messenger,但我想使用tkinter,以拥有windows,并使用按钮和其他小部件来创建界面 我有两个程序,一个是客户端,另一个是服务器。 对于客户端,它可以工作:窗口显示,我可以发送消息 对于服务器,不显示窗口 客户端程序:,python-3.x,sockets,tkinter,window,Python 3.x,Sockets,Tkinter,Window,这里是服务器程序: import socket from tkinter import * def envoyer_msg(): c.send(msg.encode()) fenetre=Tk() fenetre.geometry("{}x{}+{}+{}".format(200,200,200,200)) texte=Label(fenetre,text="SERVEUR",font=25) texte.pack() msg=String
import socket
from tkinter import *
def envoyer_msg():
c.send(msg.encode())
fenetre=Tk()
fenetre.geometry("{}x{}+{}+{}".format(200,200,200,200))
texte=Label(fenetre,text="SERVEUR",font=25)
texte.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25)
saisie.pack()
bouton_envoyer=Button(fenetre,text="Envoyer",font=25,command=envoyer_msg)
bouton_envoyer.pack()
print("1")
s = socket.socket()
port = 12345
s.bind(('', port))
s.listen(5)
c, addr = s.accept()
print ("Socket Up and running with a connection from",addr)
print("2")
while True:
rcvdData = c.recv(1024).decode()
print ("S:",rcvdData)
print("3")
首先,您应该显式地调用
mainloop()
,即使您使用的是像Python IDLE一样由tkinter
创建的IDE。否则,当脚本在终端中执行时,GUI将不会显示
服务器GUI不会显示,因为
while
循环会阻止mainloop()
。您需要将客户端连接处理任务置于线程中:
#服务器代码
导入套接字
导入线程
从tkinter进口*
def envoyer_msg():
c、 发送(msg.get().encode())
fenetre=Tk()
几何(“{}x{}+{}+{}”.format(200200))
texte=标签(fenetre,text=“SERVEUR”,font=25)
texte.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25)
saisie.pack()
bouton_envoyer=按钮(fenetre,text=“envoyer”,font=25,command=envoyer_msg)
布顿_特使包()
def服务器_任务():
全球c
s=socket.socket()
端口=12345
s、 绑定(('',端口))
s、 听(5)
尽管如此:
打印('等待连接…')
c、 addr=s.accept()
打印(“套接字启动并使用来自”的连接运行”,addr)
尽管如此:
尝试:
rcvdData=c.recv(1024).decode()
打印(“客户端:”,rcvdData)
除ConnectionResetError外:
打印('客户端已断开连接')
打破
#启动客户端连接处理线程
threading.Thread(target=server\u task,daemon=True).start()
fenetre.mainloop()
同样适用于客户端:
#客户端代码
导入套接字
导入线程
从tkinter进口*
def envoyer_msg():
s、 发送(msg.get().encode())
fenetre=Tk()
几何(“{}x{}+{}+{}”.format(200400200))
texte=标签(fenetre,text=“CLIENT”,font=25)
texte.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25)
saisie.pack()
bouton_envoyer=按钮(fenetre,text=“envoyer”,font=25,command=envoyer_msg)
布顿_特使包()
def客户端_任务():
全球s
s=socket.socket()
s、 连接(('127.0.0.1',12345))
尽管如此:
尝试:
rcvdData=s.recv(1024).decode()
打印('服务器:',rcvdData)
除ConnectionResetError外:
打印('服务器断开连接')
费内特销毁
#启动服务器连接线程
threading.Thread(target=client\u task,daemon=True).start()
fenetre.mainloop()
由于您希望使用GUI,因此最好使用
文本
小部件来保存对等消息,而不是使用print()
import socket
from tkinter import *
def envoyer_msg():
c.send(msg.encode())
fenetre=Tk()
fenetre.geometry("{}x{}+{}+{}".format(200,200,200,200))
texte=Label(fenetre,text="SERVEUR",font=25)
texte.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25)
saisie.pack()
bouton_envoyer=Button(fenetre,text="Envoyer",font=25,command=envoyer_msg)
bouton_envoyer.pack()
print("1")
s = socket.socket()
port = 12345
s.bind(('', port))
s.listen(5)
c, addr = s.accept()
print ("Socket Up and running with a connection from",addr)
print("2")
while True:
rcvdData = c.recv(1024).decode()
print ("S:",rcvdData)
print("3")