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")