每当串行端口有新数据时,就从串行数据更新 tkinter 标签 python 3.x

2023-12-05

我遇到了这个问题,我无法在标签上显示任何值,只要有新数据从串行端口传入,我就想不断更新它。我是 python 新手,真的需要帮助。

import tkinter
import tkinter.messagebox
import serial
import time

ser = serial.Serial(
    port='COM5',\
    baudrate=9600,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=4)

class Menu:

    def __init__(self):    

        self.main_window = tkinter.Tk()
        self.main_window.title("Room Light System")
        self.main_window.geometry("1200x600")


        #Frames
        self.frame_2 = tkinter.Frame(self.main_window, bg='Orange') # Receiving DATAs



        #ReceiveLabel
        self.ReceiveLabel = tkinter.Label(self.frame_2,\
                                       text = 'Received DATAs',\
                                       bg = 'White',\
                                       height = 2, width = 20)


        #Temperature
        self.GetTempLabel = tkinter.Label(self.frame_2,\
                                       text='Temperature :')
        self.TempValue = tkinter.StringVar()

        self.GetTempValueLabel = tkinter.Label(self.frame_2,bg = 'Green',\
                                               textvariable = self.TempValue
                                               )



        #PACKING!!! F2

        self.frame_2.pack()
        self.frame_2.place(x=410, y=0, height=300, width=400)
        #ReceiveLabel
        self.ReceiveLabel.pack()
        self.ReceiveLabel.place(x=100, y=10)
        #Temperature
        self.GetTempLabel.pack()
        self.GetTempLabel.place(x=50, y=80, height=20, width=120)
        self.GetTempValueLabel.pack()
        self.GetTempValueLabel.place(x=200, y=80, height=20, width=50)


        #main loop and quit
        self.quitButton = tkinter.Button(self.main_window,\
                                          text = 'Quit',
                                          command = self.main_window.destroy,\
                                          height = 2, width = 6)
        self.quitButton.pack() 

        self.quitButton.place(x=200, y=500)


        tkinter.mainloop()

    def GetTemp(self):

        data = bytearray()
        while(1):
            readline = ser.read(size=10)
            if len(readline) > 0 : 
                data = readline
                v = memoryview(data)                
                P = v.tobytes() 
                P = P.decode(encoding='UTF-8')
                self.TempValue.set(P)

gui = Menu()
ser.close()

你可以运行你的GetTemp()单独线程中的方法_thread模块。该线程被调用为Tkinter method after()。在下面的例子中我替换了你的GetTemp()生成一个随机数。

import tkinter
import tkinter.messagebox
import time
import random
import _thread

class Menu:

    def __init__(self):    

        self.main_window = tkinter.Tk()
        self.main_window.title("Room Light System")
        self.main_window.geometry("1200x600")


        #Frames
        self.frame_2 = tkinter.Frame(self.main_window, bg='Orange') # Receiving DATAs



        #ReceiveLabel
        self.ReceiveLabel = tkinter.Label(self.frame_2,\
                                       text = 'Received DATAs',\
                                       bg = 'White',\
                                       height = 2, width = 20)


        #Temperature
        self.GetTempLabel = tkinter.Label(self.frame_2,\
                                       text='Temperature :')
        self.TempValue = tkinter.StringVar()

        self.GetTempValueLabel = tkinter.Label(self.frame_2,bg = 'Green',\
                                               textvariable = self.TempValue
                                               )



        #PACKING!!! F2

        self.frame_2.pack()
        self.frame_2.place(x=410, y=0, height=300, width=400)
        #ReceiveLabel
        self.ReceiveLabel.pack()
        self.ReceiveLabel.place(x=100, y=10)
        #Temperature
        self.GetTempLabel.pack()
        self.GetTempLabel.place(x=50, y=80, height=20, width=120)
        self.GetTempValueLabel.pack()
        self.GetTempValueLabel.place(x=200, y=80, height=20, width=50)


        #main loop and quit
        self.quitButton = tkinter.Button(self.main_window,\
                                          text = 'Quit',
                                          command = self.main_window.destroy,\
                                          height = 2, width = 6)
        self.quitButton.pack() 

        self.quitButton.place(x=200, y=500)


        self.main_window.after(2000, _thread.start_new_thread, self.GetTemp, ())
        tkinter.mainloop()

    def GetTemp(self):

        while(1):
            value = random.random()
            self.TempValue.set(str(value))
            time.sleep(0.5)

gui = Menu()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每当串行端口有新数据时,就从串行数据更新 tkinter 标签 python 3.x 的相关文章

随机推荐

  • 在 C++ 类中使用

    我想使用
  • 大量圆的碰撞检测

    What is the best way to check collision of huge number of circles It s very easy to detect collision between two circles
  • Laravel 嵌套数组验证器

    我使用 Laravel Validator 类对数组进行一些基本验证 我的数组 employee name name employee address address employee department name deptname em
  • iOS - setObject 与 Synchronize

    新手问题 如果我将一个对象设置到 NSUserDefault 中 我是否还需要同步以确保该对象永久返回到 NSUserDefault 数据库中 我想我要问的是 setobject 是将对象永久放回到数据库中还是放入需要同步以确保永久存储的临
  • 如何使 tr1::array 分配对齐内存?

    您可以分配一个 std vector 它通过定义自己的分配器来分配对齐的堆内存 您可以使用 declspecalign 在堆栈上分配 C 样式数组 但是你能声明一个 tr1 array 来保证索引零处的元素对齐吗 tr1 array and
  • Net Core:实体框架中的通用存储库主 ID 关键性能

    我们正在审查通用存储库模式中的两种不同方法 目前 想要将主键映射到 Id 这样做的目的是映射到使用 Id 的通用存储库接口 下面提供两种解决方案 FindPrimaryKey Properties 对性能有何影响 在尝试查找主键时是否会导致
  • Python requests 模块多线程

    有没有可能使用多处理接口来加速我的代码 问题是这个接口使用了map函数 它只适用于1个函数 但我的代码有3个功能 我尝试将我的功能合并为一个 但没有成功 我的脚本从文件中读取站点的 URL 并对其执行 3 个功能 For 循环使它非常慢 因
  • 对列列表执行不同的函数,并使用 data.table 自动生成新的列名称

    我的 Shiny 应用程序中有一个部分可以生成列表 列表的名称是dataframe我们将计算 列表项包含我们想要的计算 想要这样做 apply to all list names for listname column x 计算functi
  • 使用 PHP 读取文件 - fopen/fread

  • 求矩阵元素组合的最小和

    昨天我的一位朋友带着一个问题来找我寻求解决方案 问题 我有一个matrix n x m 我需要找出从这些矩阵元素中可以产生的最小总和 条件是 计数只能从左上角的单元格开始 和 应在右下单元格结束 该算法应该计算所有可能的路径 这样我就需要找
  • 返回每个其他元素的列表的方案过程

    虽然我认为我已经完成了 90 但在计划中实现这个程序时遇到了一些麻烦 不幸的是 我需要对此说得有点含糊 因为这是一项家庭作业 我要 A B C D 返回 B D 但我收到一个错误 指出 The object returned as an a
  • SFTP 的 .NET 开源代码? [复制]

    这个问题在这里已经有答案了 我用 google 搜索了很多 但找不到 NET 中 SFTP 的单个开源实现 我得到的只是 SFTP 的第 3 方组件 谁能帮助我在 NET 中实现 SFTP See 这个问题 and shrpssh 这是公认
  • Android - 将文本文件保存到哪里?

    我正在使用 Adob e AIR 构建一个 Android 应用程序 允许用户导入和导出 txt 文件 作为保存 txt 文件的默认路径的最佳文件夹是什么 Thanks 您应该将文件保存在外部 SD 卡上 只需在下面创建一个自己的目录环境
  • Discord.py 如何制作掷骰子命令

    大家好 我正在用 Python 编写一个 Discord 机器人 我想编写一个掷骰子命令 我认为我做错了什么 这是代码 client command async def rolldice ctx dice4 1 2 3 4 dice6 1
  • 如何在 UICollectionViewCell 上设置 UILabel?

    我已经用自定义和标准这样做了几十次UITableView细胞 我所有的插座都已连接 这UILabel是我的子视图UICollectionViewCell在IB中 我的UICollectionViewCell对象继承了身份检查器中正确的类 我
  • jTable单元格背景颜色

    我正在尝试使用渲染器为 jTable 的单元格着色 但它们工作得不好 因为它们滞后于表格并使其无法看到 这是我的代码 TableCellRenderer Tcr jTable1 getCellRenderer x y Component c
  • 循环创建多个数据帧

    我有一个列表 每个条目都是一个公司名称 companies AA AAPL BA YHOO 我想为列表中的每个条目创建一个新的数据框 就像是 伪代码 for c in companies c pd DataFrame 我已经寻找一种方法来做
  • jQuery JSON 到字符串?

    我需要获取我的对象并将其作为表示 JSON 的字符串存储在变量中 而不是使用 JSON json 字符串并使用 parseJSON 我正在处理的库需要格式错误的 JSON 类型 因此我需要对其进行修改才能使其正常工作 最好的方法是什么 Ed
  • 在 C++ 中使用没有伙伴类/Cpp 文件的头文件是否实用

    我最近选择了 C 作为我课程的一部分 并且我试图更深入地了解标头和类之间的合作关系 从我查找过的头文件中的每个示例或教程中 它们都使用带有构造函数的类文件 然后跟进方法 如果包含它们 但是我想知道是否可以只使用头文件来保存一组相关函数 而无
  • 每当串行端口有新数据时,就从串行数据更新 tkinter 标签 python 3.x

    我遇到了这个问题 我无法在标签上显示任何值 只要有新数据从串行端口传入 我就想不断更新它 我是 python 新手 真的需要帮助 import tkinter import tkinter messagebox import serial