gpt4 book ai didi

每 30 秒或特定时间间隔后的 Python Tkinter 调用事件

转载 作者:行者123 更新时间:2023-11-28 22:44:20 25 4
gpt4 key购买 nike

我正在编写一个程序,我希望每 30 秒向套接字发送一次数据。

import socket
from Tkinter import *
import tkMessageBox
#from threading import *
import thread

_connect = False
u_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def conn(IP,PORT):
try:
print 'start'

u_sock.connect((IP, PORT))
print 'success'
_connect = True
except socket.error, (value,message):
if u_sock:
print 'fail'
u_sock.close()
return
def connFunction():
IP = IP_entry.get()
if len(IP) < 7:
tkMessageBox.showinfo("Error", "Invalid IP Address")
return
PORT = int(PORT_entry.get())
print IP , PORT
thread.start_new_thread(conn,(IP, PORT, ))
def SEND():
print 'Send'
if(_connect == True):
print 'sending...'
Inv = 'DATA'
u_sock.send(Inv.decode('hex'))
data = u_sock.recv(4096)
d = data.encode('hex').upper()
print 'Received', repr(d)


GUI = Tk()
GUI.title('RFID')
#GUI.geometry("365x280")
GUI.wm_iconbitmap('RFID.ico')
GUI.columnconfigure(8, pad=3)


GUI.rowconfigure(8, pad=3)

IP_label = Label(GUI,text = "IP Address: ",borderwidth=5)
IP_label.grid(column=0, row=1, sticky=W)
IP_entry = Entry(GUI,width=15,borderwidth=3)
IP_entry.grid(column=3,row=1,sticky=E)
PORT_label = Label(GUI,text = "Port: ",borderwidth=5)
PORT_label.grid(column=8, row=1, sticky=E)
PORT_entry = Entry(GUI,width=6,borderwidth=3)
PORT_entry.grid(column=9,row=1,sticky=E)

Conn_button= Button(GUI,text="Connect",command=connFunction,borderwidth=1,height=1,width=12)
Conn_button.grid(column=16,row=1,padx=10,pady=5,sticky=(W,E))
#GUI.after(1000,SEND)
GUI.mainloop()

我需要每 30 秒调用一次发送函数,或者如何创建每 30 秒自动调用一次的事件。我尝试这样做 GUI.after(1000,SEND) 但它对我不起作用。它只在第一次调用 SEND 函数...请帮我举个例子。谢谢

最佳答案

假设SEND耗时不到几百毫秒,去掉线程代码,使用after。关键是在内部之后调用 SEND 函数,以便它自动重复。

def SEND():
print 'Send'
...
GUI.after(30000, SEND)

...
GUI = Tk()
...
SEND()
GUI.mainloop()

关于每 30 秒或特定时间间隔后的 Python Tkinter 调用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29619826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com