我一直在做一个在两个树莓皮之间运行的项目。我发现当我用socket代码运行Tkinter代码时,它将首先运行socket代码。这是一个问题,因为我想一个屏幕显示,它正试图连接到一个客户端,但菜单和Tkinter代码只显示一次连接。请有人帮忙,这里有一些代码: 你可以看到我所做的图形哈希大纲45,46,47第45行是麻烦制造者
from tkinter import *
import socket as connect
import sys
host = ''
port = 5490
wn = Tk()
wn.geometry('800x450+300+100')
wn.title('Connect 4 Server')
BordF = Frame(wn)
BordF.pack(side=TOP, fill=BOTH)
font = 'arial 200'
font2 = 'arial 15'
LeftBorderFrame = Frame(BordF, bg='#93D5FF')
LeftBorderFrame.pack(side=LEFT, fill = Y)
LeftBorderSpacer1 = Label(LeftBorderFrame, text=' ', bg='#93D5FF', font=font)
LeftBorderSpacer1.pack(side=LEFT)
RightBorderFrame = Frame(BordF, bg='#93D5FF')
RightBorderFrame.pack(side=RIGHT, fill = Y)
RightBorderSpacer1 = Label(RightBorderFrame, text=' ', bg='#93D5FF', font=font)
RightBorderSpacer1.pack(side=RIGHT)
TopBorderFrame = Frame(BordF, bg='#93D5FF')
TopBorderFrame.pack(side=TOP, fill = X)
TopBorderSpacer1 = Label(TopBorderFrame, text='', bg='#93D5FF', font=font2)
TopBorderSpacer1.pack(side=TOP)
BottomBorderFrame = Frame(BordF, bg='#93D5FF')
BottomBorderFrame.pack(side=BOTTOM, fill = X)
BottomBorderSpacer1 = Label(BottomBorderFrame, text='', bg='#93D5FF', font=font2)
BottomBorderSpacer1.pack(side=BOTTOM)
SwitchF = Frame(BordF)
SwitchF.pack(side=TOP)
ConnGF = Frame(SwitchF)
ConnGF.pack(side=TOP)
InfoL1 = Label(ConnGF, text='Waiting for Connection \n \n ' + connect.gethostbyname(connect.gethostname()), font='arial 20')
InfoL1.pack(side=TOP)
s = connect.socket(connect.AF_INET, connect.SOCK_STREAM)
s.bind((host, port))
#
s.listen(1)
conn, adrr = s.accept()
print('Connected to: ' + adrr[0] + ': ' + adrr[1])
#
wn.mainloop()
问题是
mainloop()
显示GUI的代码行在连接代码之后。而且mainloop()
是一个无止境的循环,因此在GUI销毁之前,在它之后编写的任何代码(即socket连接)都不会发生解决方案:您可以使用
tk.after()
延迟方法。这将在执行给定方法之前等待给定的毫秒数:相关问题 更多 >
编程相关推荐