为什么在WHILE TRUE循环期间在框架上单击鼠标时为什么不能关闭程序?
程序侦听UDP或Sense HAT的输入并将其显示在窗口上。很简单:)
我想要的是通过 mouseclick
退出程序最终程序将在启动时运行,如果出现错误,它将重新启动。
现在我将解释我的程序,您可以从上面的链接中获得完整的代码。它开始,但是等待UDP数据。如果您愿意,我可以上传bat文件供服务器PC发送。 (注意:nmea仅提供信息而不是我从船上获得的信息)
最后,如果您想评论程序的结构(或其他内容),请这样做,我已有30年没有编写例程了。这是我的第一个Python例程。
程序的第一部分,(这是简短版本)
导入,打开UDP端口并定义“关闭命令”
import time
try:
import Tkinter as tk
from Tkinter import *
except ImportError:
import tkinter as tk
from tkinter import *
import socket
UDP_IP_ADDRESS = ""
UDP_PORT_NO = 10110
serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverSock.bind((UDP_IP_ADDRESS, UDP_PORT_NO))
def rightClick(event): sys.exit()
主窗口设计
## Main Window
root = Tk()
root.title("Screen GUI")
root.overrideredirect(True)
root.geometry('800x1280-0-0')
## fonts ##
Font208 = ('digiGA2', 156)
awind_frame = Frame(root, bg='cyan', width=800, height=732, pady=0, padx=0)
awind_frame.grid(row=0, sticky="ew")
## create the WIDGETS for the awind_frame
ctr_mid = Frame(awind_frame, bg='black', width=600, height=732)
ctr_mid.grid(row=0, column=1, sticky="nsew")
## create the WIDGETS for the awind_frame ctr_mid
sog_cer = Frame(ctr_mid, width=600, height=244)
sog_cer.pack_propagate(0)
sog_cer.pack(side = TOP)
sog_label = Label(sog_cer, anchor="e", text='9.9', font=Font208,padx="85", pady="17", bg='black', fg='#ffffff')
这就是我想要的“右键单击”
sog_label.bind('<Button-3>', rightClick)
和其余窗口
sog_label.pack(fill=BOTH, expand=1)
root.update()
完成这些设置后,循环开始
while True:
nmea_data, addr = serverSock.recvfrom(1024)
nmea_header = nmea_data [3:6]
nmea_data = str(nmea_data)
def rightClick(event): sys.exit()
这部分从UDP获取nmea数据并根据帧设置值
EOF是
root.mainloop()