无法关闭 X 按钮上的多线程 Tkinter 应用程序

2023-12-01

我的应用程序具有以下结构:

import tkinter as tk
from threading import Thread

class MyWindow(tk.Frame):
    ...  # constructor, methods etc.

def main():
    window = MyWindow()
    Thread(target=window.mainloop).start()
    ...  # repeatedly draw stuff on the window, no event handling, no interaction

main()

该应用程序运行完美,但如果我按 X(关闭)按钮,它会关闭窗口,但不会停止进程,有时甚至会抛出TclError.

编写这样的应用程序的正确方法是什么?如何以线程安全或无线程的方式编写?


主事件循环应该在主线程中,绘图线程应该在第二个线程中。

编写这个应用程序的正确方法是这样的:

import tkinter as tk
from threading import Thread

class DrawingThread(Thread):
    def __init__(wnd):
        self.wnd = wnd
        self.is_quit = False

    def run():
        while not self.is_quit:
            ... # drawing sth on window

    def stop():
        # to let this thread quit.
        self.is_quit = True

class MyWindow(tk.Frame):
    ...  # constructor, methods etc.
    self.thread = DrawingThread(self)
    self.thread.start()

    on_close(self, event):
        # stop the drawing thread.
        self.thread.stop()

def main():
    window = MyWindow()
    window.mainloop()

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

无法关闭 X 按钮上的多线程 Tkinter 应用程序 的相关文章

  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r

随机推荐

  • 带有回形针的水印

    根据这个例子 http dimaspriyanto com 2010 06 08 image watermarking with paperclip 我尝试在我上传的每张图片上添加水印 目前 我限制自己在大一 你猜怎么着 这不起作用 所以在
  • WPF 用户控件与父视图/视图模型的交互

    您好 我有一个 mainView 窗口 其 dataContext 设置为它自己的 viewModel 在该 viewModel 上有一个 DateTime 属性 该属性又使用 2 路绑定绑定到我的主视图上的日期选择器
  • 在 ViewPager 内水平滚动 webview

    我已将加载图像的 WebView 放入 ViewPager 中 当我尝试水平滚动图像时 我会移至下一个视图 而不是滚动图像 在移动到下一个视图之前是否可以使其滚动到图像的末尾 Override public Object instantia
  • 什么是 HTTP“主机”标头?

    由于发送 HTTP 请求时 TCP 连接已经建立 因此 IP 地址和端口是隐式已知的 TCP 连接是 IP 端口 那么 为什么我们需要Host标题 这是否仅在有多个主机映射到 TCP 连接中隐含的 IP 地址的情况下才需要 The Host
  • 使用附加字符串的整数对 WPF 数据网格进行排序

    我有一个 wpf 数据网格 我将 ObservableCollection 分配给它 DG1 DataContext a 其中一列的值如下所示 1 A B 12 A1 B 3 A2 B 10 A3 B 2 A4 B 15 A5 B 我想使用
  • 用 watir 检查标签类别?

    我有一个 div 它会根据表单是否正确提交而发生变化 我想知道是否可以检查类的特定元素 开始元素看起来像这样 div class input text div 如果输入不正确 请添加错误类别 div class input text err
  • iOS:在 ImageView 上绘制矩形并调整边框

    随附的1是一个名为 GeniusScan 的应用程序的屏幕截图 您可以在其中拍摄任何文档 并且图像视图上会显示可调整的矩形网格 您可以用手指轻松调整网格的边框 以选择要扫描的图像部分 然后它将转化为正确的预期 1 如何在图像视图上绘制网格并
  • ListView 中的空间超出了我的需要

    我使用 StackLayout 和 ListView 来显示视图的某些部分 但 ListView 占用的空间超出了我的需要 并且在列表的最后一行和配置文件延续之间留下了空白 看来我的 ListView 的行数比实际列表的长度多 或者它有固定
  • 如何在 swift 4 和 xcode 9 中的 UITableViewCell 中单击按钮时更新 UILabel? [复制]

    这个问题在这里已经有答案了 我正在构建一个订餐应用程序 其中有递增和递减按钮以及用于显示数量的 UILabel 我想更新单击增量和减量按钮时的数量标签 附有其图像 我的 ViewController 的一个片段是 protocol Gond
  • Java TimeZone.getTimeZone("PDT") 不工作

    它返回 GMT 的默认时区 使用 SimpleTimeFormat 并用 z 表示时区 它会打印 PDT 但 PDT 不在 TimeZone getAvailableIDs 返回的列表中 真是奇怪啊 有人知道为什么 PDT 不是标准 tz
  • 非聚集索引和聚集索引在同一列上

    我碰到this在 Stackoverflow 上发帖 第一个答案提到了类似的事情聚集索引包含表的所有数据 而非聚集索引仅包含列 聚集索引的位置或行 如果它位于堆上 没有聚集索引的表 非聚集索引怎么能有聚集索引的位置呢 它只包含在 B 树中排
  • 按列名称中的前缀排列列

    我有一个包含数百列的数据框 这是一个简化的示例 I need to arrange the order of specific columns so they are kept together based on the prefix in
  • 如何在 C# 中低延迟/极少延迟地播放音频文件?

    如何在 C 中以极小的延迟播放音频文件 mp3 我的意思是 文件应该在提供用户输入后立即开始播放 然后再播放 另外 如何同时并行播放两个音频文件 看看NAudio图书馆 要同时播放多个文件 请参阅这个帖子
  • 使用 JButton 将鼠标悬停在事件上

    我正在尝试在 JButton 上创建自定义鼠标悬停事件 原因是我的 JButton 当前是一个图像 所以我必须删除所有边框和动画等等 所以我这样做了 btnSinglePlayer setOpaque false btnSinglePlay
  • Spark 将隐藏参数添加到 Scala 类的构造函数中

    我不知道如何解释这一点 但 Spark 似乎向构造函数添加了一个隐藏 隐式 参数 这是我尝试过的代码spark shell 在常规 Scala shell 中参数列表将为空 scala gt class A defined class A
  • 使用 Rendertron 进行服务器端渲染 - 不带 firebase 的 Angular 5

    我使用 rendertron 作为服务器端渲染的解决方案 下面是 index js 文件 如何执行index js以及在哪里执行 我已经在我的服务器上使用 docker 设置了自己的 redertron 实例 并且我的角度应用程序构建位于
  • 将静脉坐标转换为 GPS

    我正在使用从以下位置导入的真实街道网络打开街道地图用于静脉模拟 例如卢森堡情景来自拉拉 科德卡 现在 为了准备可视化 使用 Google Earth 我想将模拟中的车辆位置从 SUMO 或 OmNET 坐标导出到 GPS 坐标 作为材料 我
  • 在多租户 Web 应用程序中使用事件委托

    我正在使用 asp net Mvc 5 开发一个多租户 n 层 Web 应用程序 在我的服务层中 我为每个重要操作定义自定义事件 并在执行这些操作后引发这些事件 例如 Public event EventHandler EntityCrea
  • Angular $resource.get 可以处理 GET 的数组和非数组吗?

    我可以通过两种方式通过 ID 获取 REST 资源 GET users 1 GET users 1 2 第一个返回单个对象 例如 id 1 name John 而第二个返回一个数组 例如 id 1 name John id 2 name J
  • 无法关闭 X 按钮上的多线程 Tkinter 应用程序

    我的应用程序具有以下结构 import tkinter as tk from threading import Thread class MyWindow tk Frame constructor methods etc def main