以下代码为python3版本,python2版本使用需保证更新数据的那部分代码处于主进程中,如果放在线程中会出现错误,所以建议能用 python3就用python3,只用我为什么知道python2会出现这个问题,那就是ros没python3的版本…
示意图(数据就会在后面的框里面通过程序运行时的值的改变而改变):
以下为代码,我这里在下面提供两个代码示例:
1.(第一部分)修改为可以直接运行显示,但注释掉了刷新数据的线程部分的,无法对数据进行更新。
"""注意这个 窗口拉起接口在 一 二 部分中被调用的不同的写法"""
self.main_window.mainloop()
2.(第二部分)没有注释掉线程部分,需要通过 from import 的方法在另外一个py文件的线程中进行调用更新,下面是我截取的部分在另一个py文件中的调用,示例
from hint_window import m_win
def t_correct(self):
t_correct = threading.Thread(target=self.calculate_instant_speed)
t_correct.setDaemon(True)
t_correct.start()
def calculate_instant_speed(self):
"""用于更新瞬时速度"""
"""
self.x_speed ,self.y_speed, self.p_speed
"""
m_win.updata_node("vx", self.x_speed)
m_win.updata_node("vy", self.y_speed)
m_win.updata_node("vw", self.p_speed)
(第一部分):
#!/usr/bin/env python2.7
#coding:utf-8
# -*- coding: utf-8 -*-
import tkinter
# import ctypes
import time
import threading
class MYIP(threading.Thread):
def __init__(self):
# 隐藏窗口
# whnd = ctypes.windll.kernel32.GetConsoleWindow()
# if whnd != 0:
# ctypes.windll.user32.ShowWindow(whnd, 0)
# ctypes.windll.kernel32.CloseHandle(whnd)
# main frame
self.main_window = tkinter.Tk()
# top frame
self.top_frame = tkinter.Frame(self.main_window)
# bottom frame
self.bottom_frame = tkinter.Frame(self.main_window)
self.L1 = tkinter.Label(self.top_frame, text='底盘驱动')
self.L1.pack(side='left')
default_value = tkinter.StringVar()
default_value.set('V2.1 python2版本')
self.E1 = tkinter.Entry(self.top_frame, textvariable=default_value, bd=2)
self.E1.pack(side=tkinter.LEFT)
self.bottom_left = tkinter.Frame(self.bottom_frame)
self.bottom_right = tkinter.Frame(self.bottom_frame)
self.label1 = tkinter.Label(self.bottom_left, text="%-10s" % "X(mm)")
self.label2 = tkinter.Label(self.bottom_left, text="%-10s" % 'Y(mm)')
self.label3 = tkinter.Label(self.bottom_left, text="%-10s" % 'W(度)')
self.label4 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vx(m/s)')
self.label5 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vy(m/s)')
self.label6 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vw(rad/s)')
self.label7 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_x')
self.label8 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_y')
self.label9 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_w')
self.label1.pack(side='top')
self.label2.pack(side='top')
self.label3.pack(side='top')
self.label4.pack(side='top')
self.label5.pack(side='top')
self.label6.pack(side='top')
self.label7.pack(side='top')
self.label8.pack(side='top')
self.label9.pack(side='top')
self.En1 = tkinter.Entry(self.bottom_right)
self.En2 = tkinter.Entry(self.bottom_right)
self.En3 = tkinter.Entry(self.bottom_right)
self.En4 = tkinter.Entry(self.bottom_right)
self.En5 = tkinter.Entry(self.bottom_right)
self.En6 = tkinter.Entry(self.bottom_right)
self.En7 = tkinter.Entry(self.bottom_right)
self.En8 = tkinter.Entry(self.bottom_right)
self.En9 = tkinter.Entry(self.bottom_right)
ret = ("label1", "label2", "label3", "label4", "label5", "label6")
self.En1.delete(0, tkinter.END)
self.En2.delete(0, tkinter.END)
self.En3.delete(0, tkinter.END)
self.En4.delete(0, tkinter.END)
self.En5.delete(0, tkinter.END)
self.En6.delete(0, tkinter.END)
self.En1.insert(0, ret[0])
self.En2.insert(0, ret[1])
self.En3.insert(0, ret[2])
self.En4.insert(0, ret[3])
self.En5.insert(0, ret[4])
self.En6.insert(0, ret[5])
self.En1.pack(side='top')
self.En2.pack(side='top')
self.En3.pack(side='top')
self.En4.pack(side='top')
self.En5.pack(side='top')
self.En6.pack(side='top')
self.En7.pack(side='top')
self.En8.pack(side='top')
self.En9.pack(side='top')
self.bottom_left.pack(side='left')
self.bottom_right.pack(side='right')
self.top_frame.pack()
self.bottom_frame.pack()
print("准备开启窗口数据更新线程")
self.main_window.mainloop()
# t_updata = threading.Thread(target=self.updata_datas)
# t_updata.start()
def updata_datas(self):
while True:
# self.label1 = tkinter.Label(self.bottom_left, text="%-10s" % "X(mm)")
# self.label2 = tkinter.Label(self.bottom_left, text="%-10s" % 'Y(mm)')
# self.label3 = tkinter.Label(self.bottom_left, text="%-10s" % 'W(度)')
# self.label4 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vx(m/s)')
# self.label5 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vy(m/s)')
# self.label6 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vw(rad/s)')
print (110)
time.sleep(0.2)
self.main_window.mainloop()
def updata_node(self,name,val):
if name == "x":
self.En1.delete(0, 10)
self.En1.insert(0, str(val)) # delete
elif name == "y":
self.En2.delete(0, 10)
self.En2.insert(0, str(val)) # delete
elif name == "w":
self.En3.delete(0, 10)
self.En3.insert(0, str(val)) # delete
elif name == "vx":
self.En4.delete(0, 10)
self.En4.insert(0, str(val)) # delete
elif name == "vy":
self.En5.delete(0, 10)
self.En5.insert(0, str(val)) # delete
elif name == "vw":
self.En6.delete(0, 10)
self.En6.insert(0, str(val)) # delete
elif name == "cx":
self.En7.delete(0, 10)
self.En7.insert(0, str(val)) # delete
elif name == "cy":
self.En8.delete(0, 10)
self.En8.insert(0, str(val)) # delete
elif name == "cw":
self.En9.delete(0, 10)
self.En9.insert(0, str(val)) # delete
def process_data(self):
if self.jsondata['data']['country']:
country = self.jsondata['data']['country']
else:
country = "NULL"
if self.jsondata['data']['area']:
area = self.jsondata['data']['area']
else:
area = "NULL"
if self.jsondata['data']['region']:
region = self.jsondata['data']['region']
else:
region = "NULL"
if self.jsondata['data']['city']:
city = self.jsondata['data']['city']
else:
city = "NULL"
if self.jsondata['data']['county']:
county = self.jsondata['data']['county']
else:
county = "NULL"
if self.jsondata['data']['isp']:
isp = self.jsondata['data']['isp']
else:
isp = "NULL"
return (country, area, region, city, county, isp)
m_win = MYIP()
# if __name__ == '__main__':
#
# m_win = MYIP()
(第二部分):
#!/usr/bin/env python2.7
# coding:utf-8
# -*- coding: utf-8 -*-
import tkinter
# import ctypes
import time
import threading
class MYIP(threading.Thread):
def __init__(self):
# 隐藏窗口
# whnd = ctypes.windll.kernel32.GetConsoleWindow()
# if whnd != 0:
# ctypes.windll.user32.ShowWindow(whnd, 0)
# ctypes.windll.kernel32.CloseHandle(whnd)
# main frame
self.main_window = tkinter.Tk()
# top frame
self.top_frame = tkinter.Frame(self.main_window)
# bottom frame
self.bottom_frame = tkinter.Frame(self.main_window)
self.L1 = tkinter.Label(self.top_frame, text='底盘驱动')
self.L1.pack(side='left')
default_value = tkinter.StringVar()
default_value.set('V2.1 python2版本')
self.E1 = tkinter.Entry(self.top_frame, textvariable=default_value, bd=2)
self.E1.pack(side=tkinter.LEFT)
self.bottom_left = tkinter.Frame(self.bottom_frame)
self.bottom_right = tkinter.Frame(self.bottom_frame)
self.label1 = tkinter.Label(self.bottom_left, text="%-10s" % "X(mm)")
self.label2 = tkinter.Label(self.bottom_left, text="%-10s" % 'Y(mm)')
self.label3 = tkinter.Label(self.bottom_left, text="%-10s" % 'W(度)')
self.label4 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vx(m/s)')
self.label5 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vy(m/s)')
self.label6 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vw(rad/s)')
self.label7 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_x')
self.label8 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_y')
self.label9 = tkinter.Label(self.bottom_left, text="%-10s" % 'C_w')
self.label1.pack(side='top')
self.label2.pack(side='top')
self.label3.pack(side='top')
self.label4.pack(side='top')
self.label5.pack(side='top')
self.label6.pack(side='top')
self.label7.pack(side='top')
self.label8.pack(side='top')
self.label9.pack(side='top')
self.En1 = tkinter.Entry(self.bottom_right)
self.En2 = tkinter.Entry(self.bottom_right)
self.En3 = tkinter.Entry(self.bottom_right)
self.En4 = tkinter.Entry(self.bottom_right)
self.En5 = tkinter.Entry(self.bottom_right)
self.En6 = tkinter.Entry(self.bottom_right)
self.En7 = tkinter.Entry(self.bottom_right)
self.En8 = tkinter.Entry(self.bottom_right)
self.En9 = tkinter.Entry(self.bottom_right)
ret = ("label1", "label2", "label3", "label4", "label5", "label6")
self.En1.delete(0, tkinter.END)
self.En2.delete(0, tkinter.END)
self.En3.delete(0, tkinter.END)
self.En4.delete(0, tkinter.END)
self.En5.delete(0, tkinter.END)
self.En6.delete(0, tkinter.END)
self.En1.insert(0, ret[0])
self.En2.insert(0, ret[1])
self.En3.insert(0, ret[2])
self.En4.insert(0, ret[3])
self.En5.insert(0, ret[4])
self.En6.insert(0, ret[5])
self.En1.pack(side='top')
self.En2.pack(side='top')
self.En3.pack(side='top')
self.En4.pack(side='top')
self.En5.pack(side='top')
self.En6.pack(side='top')
self.En7.pack(side='top')
self.En8.pack(side='top')
self.En9.pack(side='top')
self.bottom_left.pack(side='left')
self.bottom_right.pack(side='right')
self.top_frame.pack()
self.bottom_frame.pack()
print("准备开启窗口数据更新线程")
# self.main_window.mainloop()
t_updata = threading.Thread(target=self.updata_datas)
t_updata.start()
def updata_datas(self):
while True:
# self.label1 = tkinter.Label(self.bottom_left, text="%-10s" % "X(mm)")
# self.label2 = tkinter.Label(self.bottom_left, text="%-10s" % 'Y(mm)')
# self.label3 = tkinter.Label(self.bottom_left, text="%-10s" % 'W(度)')
# self.label4 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vx(m/s)')
# self.label5 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vy(m/s)')
# self.label6 = tkinter.Label(self.bottom_left, text="%-10s" % 'Vw(rad/s)')
print(110)
time.sleep(0.2)
self.main_window.mainloop()
def updata_node(self, name, val):
if name == "x":
self.En1.delete(0, 10)
self.En1.insert(0, str(val)) # delete
elif name == "y":
self.En2.delete(0, 10)
self.En2.insert(0, str(val)) # delete
elif name == "w":
self.En3.delete(0, 10)
self.En3.insert(0, str(val)) # delete
elif name == "vx":
self.En4.delete(0, 10)
self.En4.insert(0, str(val)) # delete
elif name == "vy":
self.En5.delete(0, 10)
self.En5.insert(0, str(val)) # delete
elif name == "vw":
self.En6.delete(0, 10)
self.En6.insert(0, str(val)) # delete
elif name == "cx":
self.En7.delete(0, 10)
self.En7.insert(0, str(val)) # delete
elif name == "cy":
self.En8.delete(0, 10)
self.En8.insert(0, str(val)) # delete
elif name == "cw":
self.En9.delete(0, 10)
self.En9.insert(0, str(val)) # delete
def process_data(self):
if self.jsondata['data']['country']:
country = self.jsondata['data']['country']
else:
country = "NULL"
if self.jsondata['data']['area']:
area = self.jsondata['data']['area']
else:
area = "NULL"
if self.jsondata['data']['region']:
region = self.jsondata['data']['region']
else:
region = "NULL"
if self.jsondata['data']['city']:
city = self.jsondata['data']['city']
else:
city = "NULL"
if self.jsondata['data']['county']:
county = self.jsondata['data']['county']
else:
county = "NULL"
if self.jsondata['data']['isp']:
isp = self.jsondata['data']['isp']
else:
isp = "NULL"
return (country, area, region, city, county, isp)
m_win = MYIP()
# if __name__ == '__main__':
#
# m_win = MYIP()