用python显示在GUI中更新的服务器数据



这就是我的想法:我在OPC服务器中有数据(数字),我想通过GUI检索。这些数据应该每5秒更新一次,因此也会显示在GUI中。我已经通过一个while循环尝试过了,它也可以作为打印输出,但是没有窗口显示给我了。

会有也许有人一个主意,我可以如何实现这一点?

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter
from Tkinter import *
import sys
import os
import time
from opcua import Client

url = "opc.tcp://xxxxxxx"
client = Client(url)
client.connect()
#create main window
master = Tkinter.Tk()
print('test')
master.title("GUI Raspberry")
master.geometry("900x900")

label = Tkinter.Label(master, text='test')
label2 = Tkinter.Label(master, text='')
label.pack(padx = 5, pady = 10, side = LEFT)
while True:     
Mean = client.get_node("ns=2;i=3")
MeanValue = Mean.get_value()
label2['text'] = MeanValue
label2.pack(padx = 5, pady = 20, side = LEFT)
print(MeanValue)
time.sleep(5)

master.update()
time.sleep(2)
master.mainloop()
master.destroy()

在任何GUI中使用while True都不是好主意。它阻止mainloop从系统获取键/鼠标事件,将它们发送给小部件,运行分配给按钮和其他小部件的函数,(重新)绘制窗口和小部件。

你可能需要在单独的线程中运行while True-但是线程不能更新部件,它必须将结果发送到主线程-这会产生其他问题。

或者您应该检查是否可以使用"timer"而不是while定期运行代码。
所有gui都有一些"timer"
tkintermaster.after(milliseconds, function_name)

我无法测试它,但它可能是这样的

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import time
import Tkinter as tk
from opcua import Client

# --- functions ---
def function():
mean = client.get_node("ns=2;i=3")  # PEP8: `lower_case_name` for variables
mean_value = mean.get_value()       # PEP8: `lower_case_name` for variables
label2['text'] = mean_value
print(mean_value)
master.after(5000, function)  # run again after 5000ms (5s)

# --- main ---
url = "opc.tcp://xxxxxxx"
client = Client(url)
client.connect()
# create main window  # PEP8: in comment add space after `#` (and two spaces before `#` if it is in line with code)
master = tk.Tk()
print('test')
master.title("GUI Raspberry")
master.geometry("900x900")
label1 = tk.Label(master, text='test')
label1.pack(padx=5, pady=10, side='left')
label2 = tk.Label(master, text='')
label2.pack(padx=5, pady=20, side='left')  # show it only once
function()  # run first time
master.mainloop()

PEP 8——Python代码风格指南

最新更新