在 tkinter 循环中不断访问线程

2024-01-08

我正在尝试制作一个 GUI 来连续绘制从微处理器接收到的信号。我试图仅通过使用类来实现这一点,但失败了,因为只有 GUI 类是 oppend 的。现在我已经实现了线程(或者至少我认为我已经实现了!?),但每个线程只运行一次。这让我相信我不明白 tkinter 中的主循环是如何工作的,所以我可以重新编写我的代码以使线程变得活跃吗?

import Tkinter
import tkMessageBox as messagebox
from serial import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
import time
import threading

go=0

x=[0.0001,0.0002,0.0003]
y=[3600,1000,2000]
stid=time.time()

root = Tkinter.Tk()
root.title("Serial gui")

class SensorThread(threading.Thread):
    def run(self):
        global run
        global x
        global y
        global stid
        print "run er ok"
        if go==1:
            print "go er ok"
            ser = Serial(5, 9600, timeout=1)
            f=ser.read(4)
            ser.close()
            x.append(time.time()-stid)
            y.append(f)


class Foo:
    def __init__(self, master):
        print "foo ok"

        frame = Tkinter.Frame(root)

        self.button_left = Tkinter.Button(frame,text="Start",
                                command=self.start)
        self.button_left.pack(side="left")

        self.button_right = Tkinter.Button(frame,text="Stop",
                                command=self.stop)
        self.button_right.pack(side="right")

        self.button_midt = Tkinter.Button(frame, text='Quit', command=self.terminate)
        self.button_midt.pack(side="bottom")

        fig = Figure()
        ax = fig.add_subplot(111, axisbg='black')

        canvas = FigureCanvasTkAgg(fig,master=master)
        canvas.show()
        canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
        frame.pack()

        line1, = ax.plot(x, y, 'r-') # Returns a tuple of line objects, thus the comma
        line1.set_ydata(y)
        fig.canvas.draw()


    def start(self):
        global go
        go=1
        print go

    def stop(self):
        global go
        go=0
        print go

    def terminate(self):
        root.quit()     # stops mainloop
        root.destroy()  # this is necessary on Windows to prevent
                        # Fatal Python Error: PyEval_RestoreThread: NULL tstate

if __name__ == "__main__":
    SensorThread().run()
    Foo(root)
    root.mainloop() 

我希望你们中的一些人可以帮助我使这段代码成为一个实时更新绘图的程序。

超级我在程序中更改了以下内容,

class SensorThread(threading.Thread):
def run(self):
    global run
    global x
    global y
    global stid
    #print "run er ok"
    if go==1:
        print "go er ok"
        ser = Serial(17, 9600, timeout=1)
        f=ser.read(4)
        ser.close()
        x.append(time.time()-stid)
        y.append(f)
        SensorThread().start()
    else:
        SensorThread().start()

class Foo:
....

if __name__ == "__main__":
SensorThread().start()
Foo(root)
root.mainloop() 

但它仍然没有更新绘图的图形,它不应该在 Foo 类中执行此操作吗?现在,当我退出或退出 python 脚本时,它仍然使用 50% 的 CPU 功率,可能是因为传感器线程现在永远运行!?


看看这个食谱,它展示了如何做到这一点:

http://code.activestate.com/recipes/82965-threads-tkinter-and-asynchronous-io/ http://code.activestate.com/recipes/82965-threads-tkinter-and-asynchronous-io/

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

在 tkinter 循环中不断访问线程 的相关文章

  • 使用 tkinter + pyhook 时冻结。两个事件循环和多线程

    我正在用 python 2 7 编写一个工具 记录用户按下键盘或鼠标按钮的次数 点击次数将显示在屏幕左上角的一个小黑框中 即使另一个应用程序处于活动状态 该程序也会记录点击 除非我将鼠标移到框上 否则它工作正常 然后鼠标冻结几秒钟 然后程序
  • Python 滚动文本模块

    我想使用scrolledtext模块创建一个ScrolledText小部件 以便在python中创建GUI 我已经成功创建了 ScrolledText 小部件 但是我无法向其添加水平滚动条 e3 ScrolledText window3 w
  • C#等待串口数据

    我试图通过 C 应用程序从指纹扫描仪获取数据 但在指纹发送之前 我的整个代码都会执行 我尝试使用延迟功能System Threading Thread Sleep 1000 因此它可以在下一步执行之前获取数据 但这一切似乎都是徒劳的 任何人
  • Python 3 Tkinter:如何在 Tkinter Text 中自动换行文本

    如何在 Tkinter 中对文本进行自动换行Text小部件 wraplength只接受屏幕单位 而不是WORD option Use the wrap WORD选项 这是一个例子 from tkinter import root Tk t
  • 返回 Tkinter Treeview iid

    我有一个树视图 并在其中插入了一些数据 如下所示 self tree insert end iid test1 text test a values data1 data2 这将在树视图的末尾添加一个条目 其中包含文本 test a 以及列
  • C# SerialPort BaseStream ReadAsync - CancellationToken 从未取消?

    我尝试以异步方式从串行端口读取数据 请记住操作所花费的时间不得超过指定的时间段 我使用的代码 private async Task
  • 如何将 python Tkinter 桌面应用程序转换为 Web 应用程序 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 TKinter 库编写了 python 2 7 GUI 桌面应用程序 并且工作正常 现在我想将其转换为网络应用程序 我研究
  • Windows 通用应用程序串行端口无法打开,SerialDevice.FromIdAsync 始终为 null

    我正在尝试在 Windows 通用应用程序中使用串行端口 我一直在使用微软的串行示例应用程序作为模板 但是我遇到了一个相当奇怪的问题 var dis await DeviceInformation FindAllAsync SerialDe
  • 将下载的字体添加到 Tkinter

    我想下载一个开源字体并在我的 Python Tkinter 程序中使用它 如何告诉 Tkinter 从目录导入字体或将字体放在与程序相同的文件夹中 Note 我已经寻找答案一段时间了 甚至阅读了 Tkinter 的 API 参考 了解我能找
  • 在 ttk 进度条中显示百分比

    我正在尝试显示百分比ttk Progressbar当该功能运行时提醒用户已执行的过程的范围以及剩余的内容 我能够显示百分比 但百分比最多23 哪一个是length of my tuple 我怎样才能让它达到100 length of tup
  • Ttk Treeview:跟踪键盘选择

    这是一个带有 ttk 树视图的 Tk 小部件 当用户单击该行时 会执行某些功能 此处仅打印项目文本 我需要的是以下内容 最初的重点是文本输入 当用户按下 Tab 键时 焦点应该转到第一行 并且应该执行绑定到 Click 事件的函数 当用户使
  • Python tkinter ttk 主题是否基于操作系统可用

    我正在使用 Python 3 5 2tkinter ttk用于在 Linux Ubuntu 16 04 上开发简单 GUI 实用程序的模块 我的ttk version 0 3 1 有四种可用的小部件主题 clam alt classic d
  • Win32 API:如何读取序列号,或者如果不是数据则在超时内退出

    我需要一个函数来从串行端口读取数据 或者如果在时间间隔内没有数据则返回 例如 在 GNU Linux 上你可以使用poll orselect read Windows 中有类似的东西吗 下面是我尝试过的 它应该可以工作 但是功能获取重叠结果
  • 图像未出现在 Tkinter 上

    我有一个问题Tkinter因为我想添加图像作为框架的背景 但是 我尝试了很多方法但没有显示出来 我在代码的开头 在解决这个问题后我将继续前进 这是我的代码 import Tkinter from Tkinter import sc Tk s
  • Tkinter 按钮鼠标右键和左键单击有不同的命令

    我正在用 Python 制作扫雷游戏 并使用 tkinter 库来创建 gui 有没有 绑定到 tkinter 按钮两个命令的方法 一个是右键单击按钮时的命令 另一个是单击左键时的命令 通常 按钮仅设计用于单击 但 tkinter 允许您为
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • 如何在Android studio中调用.so库上的方法

    编辑 请参阅我的第一个答案 我想在我的项目中使用 android 串口 api 我这样做有很多麻烦 关于如何配置旧版本的 gradle 或如何使用 NDK 进行编译 存在大量相互冲突的信息 而这两者都没有用 我完全迷失了 我发现唯一可能正确
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 将 C++ 中的所有重音字母更改为普通字母

    问题 如何将 C 或 C 中的所有重音字母更改为普通字母 我的意思是这样的e a c会成为eeeeaaaacc 我已经尝试过的 我尝试过手动解析字符串并一一替换它们 但我认为必须有一种我不知道的更好 更简单的方法 这将保证我不会忘记任何重音
  • Chrome/WebKit 在使用背景、边框半径和顶部/底部边框时创建实心条

    Google Chrome 在边框半径 背景颜色以及顶部和底部边框方面存在问题 这是要重现的证据和代码 http jsfiddle net 6ADtd 4 http jsfiddle net 6ADtd 4 div div div back
  • 如何从登录屏幕进入下一个屏幕? JPanel、JFrame?

    我有一个关于构建 GUI 应用程序的问题 我觉得这个问题的标题不太准确 但我想不出更好的标题 构建应用程序的正确方法是什么 我是否应该只创建一个 JFrame 然后根据需要更改该 JFrame 中的面板 或者当我从一件事转移到另一件事时 我
  • 使用 ndk clang 3.4/3.5 编译 __thread 没有运气

    我试图在这个小程序中使用 thread 但没有运气 知道 ndk 10c clang 3 4 3 5 是否支持此 TLS 相同的程序可以使用 ndk gcc 4 8 4 9 和本机 clang gcc 编译器正常编译 这是程序和编译行 th
  • 将 Firebase 导出到 BigQuery 的数据扁平化为 1 行 = 1 个事件的表(嵌套数据中的嵌套数据)

    我想我可以通过提出一个更简单的问题并引用一个更简单的数据示例来获得我需要的东西here https stackoverflow com questions 38839559 flatten bigquery nested field con
  • C++14 中标准布局类的定义

    A 标准布局class 在 C 14 中的 class 7 中定义 如下 重点是我的 A 标准布局class 是一个类 7 1 没有非标准布局类型的非静态数据成员 类 或此类类型的数组 或引用 7 2 没有虚函数 10 3 也没有虚基类 1
  • 如何通过google帐户快速检查用户是否已经在firebase中注册

    我想为用户执行一个操作首次登录 注册 使用谷歌帐户和另一个操作 如果用户之前已经登录过 如果某个用户已经并且仍然使用他们的 Google 帐户登录 我们可以使用这行代码 Auth auth addStateDidChangeListener
  • JSON.Net读取错误

    我正在尝试使用 Json Net 解析一些 JSON 数据 这是我的数据 UIDClan 1 UIDKnjiga 1 Naslov Title1 DatumZaKada 2013 08 09 00 00 00 DatumIstekRez n
  • 在Java中访问其他类文件

    我们刚刚开始为我的学位学习 Java 我得到了一个文件夹 其中包含各种 Java 类 每个类都有自己的 java 文件 文件名与其所在类的名称相同 有一个文件托管一个公共类 其中包含以下内容 public static void main
  • 修改不是先前提交的提交[重复]

    这个问题在这里已经有答案了 我经常会有如下的工作流程 提交对一组文件的更改 将更改提交到不同的文件组 意识到我错过了一些属于第一次提交的更改 Curse 我无法利用git commit amend因为这不是我需要更改的最新提交 将更改添加到
  • 修复了推回内容的元素

    我正在寻找一种在页面顶部有一个固定元素的方法 该元素会根据页面宽度改变高度 并且还会推回下面的内容 到目前为止我已经解决了一些问题 但我希望有一个更干净的解决方案 我所做的是让两个顶部元素具有相同的内容 一个设置为固定位置 另一个设置为相对
  • 在加载时无需事件即可将数据从子级传递到父级,这在 vue 世界中可能吗?

    我觉得如果没有 click 事件或事件或输入字段或某些需要交互的东西 则不可能将数据从子级传递到父级 只需在加载时通 过使用此数据中的变量和控制将数据从子级数据变量传递到另一个数据变量中的父级父变量 只是加载时 可能吗 将 JSON 数据从
  • 表达式树的后缀表示法

    关于如何将表达式树转换为后缀表示法 有足够的资源 而且并不难 但我必须将后缀表达式解析为表达式树 表达式为 A 2 2 A B B 2 A B 我真的不知道如何解释这个表达式 有人知道如何处理这个问题吗 创建一个包含可能是树一部分的节点的堆
  • 拦截windows打开的文件

    我正在尝试制作一个可以拦截文件打开过程的小程序 目的是当用户双击给定文件夹中的文件时 Windows会向软件发出通知 然后软件处理该请求并将文件的数据返回给Windows 也许还有另一种解决方案 例如监视 Open 消息并强制 Window
  • Android Studio -- 无法编辑文件

    我认为这是一个非常愚蠢的问题 而且我找不到任何其他类似的问题 所以我认为它真的很愚蠢 但它仍然让我发疯 我无法弄清楚这一点 因此 每次我在 Android Studio 中打开文件时 它都不会让我编辑它 就像它处于某种只读或选择模式或其他模
  • Python 列表和 foreach 访问(在内置列表中查找/替换)

    我原本以为Python是一种纯粹的引用传递语言 来自 C C 的我忍不住会想到内存管理 而且很难将它从我的脑海中抹去 因此 我尝试从 Java 的角度来考虑它 并将除原语之外的所有内容都视为按引用传递 问题 我有一个列表 其中包含一堆用户定
  • Dictionary.values() 列表与集合中查找的时间复杂度[重复]

    这个问题在这里已经有答案了 在Python中 我们知道在字典中查找键需要O 1 运行时间 但是在dictionary values 中查找的运行时间是多少 dictionary a 66 77 88 b 99 100 key a if ke
  • Three.js DoubleSided 材质不会在平面参数几何体的两侧投射阴影

    看看这个jsfiddle http jsfiddle net blwoodley 5Tr4D 1 http jsfiddle net blwoodley 5Tr4D 1 我有一个蓝色聚光灯 照射在旋转的旋转正方形上 这会给地下地面投射阴影
  • 将身高设置为 100%

    我需要将所有网页 主页除外 的正文位于http www zorglegal nl http www zorglegal nl到相同的高度 100 浏览器高度 因此右侧的棕色条从上到下全屏拉伸 我怎样才能最好地实现这一目标 html heig
  • 在 tkinter 循环中不断访问线程

    我正在尝试制作一个 GUI 来连续绘制从微处理器接收到的信号 我试图仅通过使用类来实现这一点 但失败了 因为只有 GUI 类是 oppend 的 现在我已经实现了线程 或者至少我认为我已经实现了 但每个线程只运行一次 这让我相信我不明白 t