Python tkinter创建Ui,button触发函数里实现转线程,关闭Ui后函数被再次调用问题

别再纠结用哪个库了!Python量化实战:MyTT、TA-Lib、Pandas TA三大指标库横向评测(附避坑指南) 本文深度评测Python量化分析中三大指标库MyTT、TA-Lib和Pandas TA的核心差异与适用场景。从架构设计、性能表现到实战应用,提供详尽的横向对比数据,帮助开发者根据股票指标计算需求选择最佳工具,并附有高频交易优化方案和常见避坑指南。 阅读详情

问题引入:

写自动化测试工具的时候, 用了thinter实现简单的界面,以实现,交互显示和设置配置项,显示动态测试过程中日志,“开始测试”按钮触发这个整个自动化测试流程。 

因为整个自动化测试是测试的【一个客户端】,中间是会底层利用win32api启动【这个客户端】的。 

最后发现:当整个测试完成后,按X按钮关闭测试UI的时候,需测试的客户端又被启动了。 看日志发现是,整个测试流程又开始走一遍。 最后发现是if __name__=="__main__"引起的。

 

详细说下:

如上图所以问题。在pychorm中并不会出现问题,只有当打包编译成exe后运行,关闭UI后出现重复运行的情况。

问题验证:

创建文件mymain.py(相当于上面画图举例的文件a.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/8/28 16:25
# @Author  : lishenluo

import threading
import mytt
from tkinter import *

def ui_start():
    win = Tk()
    # 设置标题
    win.title("我是测试")
    win.geometry("300x200+100+100")
    button = Button(win, text='我是按钮', font=('Arial', 12), width=12, height=1, command=button_function)
    button.pack()
    win.mainloop()

def button_function():
    th = threading.Thread(target=mytt.start, args=())
    th.start()

if __name__=="__main__":
    ui_start()

创建文件mytt.py(相当于上面画图举例的文件b.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/8/28 16:24
# @Author  : lishenluo


import logging

logging.basicConfig(filename="test.log", filemode="w",
                    format="[%(asctime)s][%(name)s][%(levelname)s]%(message)s",
                    datefmt="%Y-%m-%d %H:%M:%S", level=logging.DEBUG)

logging.info("this is before if __name__:%s"%__name__)

def start():
    logging.info("你是大笨蛋") #整个自动化测试开始入口函数

if __name__=='__main__':
    start()
    logging.info("this is after if __name__:%s"%__name__)

在pycharm运行结果,X关闭窗口后日志也不变,说明没有多余的运行。

利用pyinstaller编译出exe,对应mymain.spec文件如下

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['mymain.py','mytt.py'],
             pathex=['E:\\JQCode\\jqtests\\threadUiTest'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='threadUITest',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='threadUITest')

利用cmd,去到对应目录下,编译出exe文件

最后pycharm代码目录结构,编译出的exe文件在dist下

运行并查看日志:

 

结语:有不明白的欢迎留言

ps:验证了一下,中间不转线程一样会出现问题

QMT策略开发进阶:用pytdx抓行情+MyTT算指标,一个策略文件全搞定 本文详细介绍了如何在QMT量化交易平台中整合pytdx行情接口和MyTT指标计算库,实现从数据获取到信号生成的全流程策略开发。通过环境配置、数据获取实战、指标计算优化等步骤,帮助开发者构建高效、灵活的量化交易策略,提升策略性能和适应性。 阅读详情

相关推荐

Python Tkinter安装指南:从零搭建图形界面开发环境

图形用户界面(GUI)是软件与用户交互的核心,它将复杂的命令行操作转化为直观的视觉元素。在Python生态中,Tkinter作为标准库内置的GUI工具包,通过封装底层的Tk图形引擎,为开发者提供了跨平台的界面开发能力。其核心价值在于零安装成本和极低的学习门槛,特别适合快速原型开发、教学演示和内部工具图形化。在桌面应用、数据可视化工具和自动化脚本前端等场景中,Tkinter能帮助开发者将Python脚本转化为易用的窗口程序。本文聚焦于Tkinter的安装部署,针对Windows、macOS和Linux三大操作

weixin_33749131的博客 452

【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)

给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码),这里包含了安装方法和使用方法,含有部分代码,希望可以帮助到各位。

IT里的交易员-博客 2万+

Tkinter生产级GUI开发:事件循环、线程安全与工业部署实战

Tkinter作为Python标准库内置GUI框架,其核心价值在于跨平台确定性与底层可控性,而非视觉表现。它基于Tcl/Tk引擎构建事件驱动协程系统,依赖主线程单循环(mainloop)调度,天然规避多线程UI竞态问题;通过StringVar数据绑定、after非阻塞延时、queue线程通信等机制,可实现高可靠实时交互。在工控、实验室仪器、老旧设备现场等对稳定性、轻量部署和一次成功率要求严苛的场景中,Tkinter凭借800KB级安装包、零外部依赖、GIL协同内存管理等特性,成为交付优先选择。本文深入解析其

weixin_30316097的博客 395

【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)

话说做量化交易,多多少少都会用到各种指标。可是,使用过程中才发现,各种问题,搞得人焦头烂额。股票指标怎么算?谁家的库计算起来又快又准?Talib的macd指标计算出来和国内软件不一样,怎么办?1、通过对比可以发现,使用MyTT和Talib计算耗时较短,而且Talib更胜一筹。这是因为后者为已编译过的库,所以运算效率极高。这也是其使用普遍的原因。不过MyTT由于是单个文件,语法很是精炼,而且也方便大家可以自由扩展。

IT里的交易员-博客 9154

Python Tkinter GUI开发:从入门到实战的完整指南

图形用户界面(GUI)开发是连接用户与程序功能的重要桥梁,其核心原理在于事件驱动模型,即通过响应用户操作来更新界面状态。在Python生态中,Tkinter作为标准库内置的GUI工具包,凭借其零依赖、开箱即用的特性,为开发者提供了快速构建桌面应用的解决方案。其技术价值在于降低了GUI开发门槛,使开发者能专注于业务逻辑而非环境配置。在应用场景上,Tkinter特别适合开发内部工具、教学演示、快速原型以及各类小型桌面应用。本文聚焦于Tkinter的实战技巧与架构设计,深入解析其布局管理、事件处理与多线程协同等核

weixin_33717117的博客 370

Tkinter实战指南:Python GUI开发的工程化选择与最佳实践

Tkinter是Python标准GUI库,基于Tcl/Tk实现,以轻量、零依赖、跨平台兼容性强著称。其核心原理是事件驱动模型+容器化布局(grid/pack/place),不依赖外部运行时,打包后单文件可直接分发。技术价值在于极低的工程维护成本、高确定性行为和对中小型工具类应用的精准匹配。典型应用场景包括内部自动化工具、数据采集前端、设备监控面板、办公辅助软件等需快速交付、长期稳定运行的桌面程序。本文结合十年一线开发经验,系统解析Tkinter在真实项目中的选型逻辑、容器化布局范式、生产级健壮性设计(DPI

weixin_34293911的博客 425

[转发]MyTT所有源码

Python版通达信指标

long236076535的专栏 3584

Tkinter实战:三天做出零依赖Python GUI小工具

GUI(图形用户界面)是Python程序走向实用化的关键一环,其核心在于事件驱动模型与本地交互能力的结合。Tkinter作为CPython标准库内置的GUI框架,无需额外安装、天然免部署,是构建轻量级桌面工具的理想选择。它通过组件创建、布局管理、事件绑定和主循环四大机制,将用户操作(如点击、输入、拖拽)精准映射为业务逻辑响应,特别适合开发文件处理、数据整理、内部办公等‘最后一公里’自动化工具。相比PyQt或Web方案,Tkinter以极低的交付成本和清晰的学习路径,成为初学者快速落地、职场人高效交付的生产力

weixin_30357231的博客 327

Python多线程GUI编程实战:Pygame数字雨与Tkinter弹窗协同实现

在Python GUI编程中,多线程是处理并发任务、提升用户体验的关键技术。其核心原理在于通过创建多个执行流,允许耗时操作(如动画渲染)与用户界面响应并行运行,从而避免界面卡顿。然而,由于Python的全局解释器锁(GIL)以及GUI框架(如Tkinter)的线程不安全特性,直接跨线程操作界面组件极易导致程序崩溃。这凸显了线程间安全通信与任务调度的技术价值。常见的应用场景包括开发后台任务监控面板、实时数据仪表盘以及需要复杂动画交互的桌面应用。本文以构建一个集成了Pygame数字雨动画与Tkinter随机弹窗

weixin_30617797的博客 412

Tkinter是Python GUI入门的底层基石

GUI编程本质是事件驱动的状态映射,而非视觉呈现;其核心原理包括主事件循环、组件树结构与几何管理机制,这些概念贯穿所有主流框架。Tkinter作为Python标准库内置的轻量级GUI工具,以零依赖、跨平台、低内存和高启动性能著称,特别适合教学演示、内部工具开发及边缘设备部署。它强制开发者直面GUI底层模型,是理解PyQt、wxPython乃至Web前端响应式设计的思想源头。对于刚掌握基础语法、需快速交付稳定桌面应用或面向老旧硬件/离线环境的开发者而言,Tkinter不是过渡方案,而是不可替代的工程实践起点。

dianzongfan5428的博客 387

Python GUI开发入门:Tkinter核心组件、布局与事件处理实战

图形用户界面(GUI)是连接用户与程序功能的桥梁,其核心在于通过可视化组件(Widgets)接收输入与展示信息。在Python生态中,Tkinter作为标准库内置的GUI工具包,因其开箱即用、学习曲线平缓而成为入门首选。其原理基于事件驱动模型,通过布局管理器(如pack、grid)组织组件,并利用事件绑定响应用户交互,技术价值在于能快速构建原型与实用工具,极大提升开发效率。应用场景广泛覆盖自动化脚本界面、教学演示、数据查看工具及内部管理系统等。本文聚焦Tkinter,通过详解按钮、输入框等核心组件,剖析gr

weixin_34112181的博客 435

python中tkinter模块_Python模块:tkinter

最近我同学在做一个聊天程序,服务器已经全部完成了,客户端也已经使用CMD版本的进行过测试了,为了做的好一点,需要弄一个图形用户界面的客户端,Python编写图形界面的模块有好多,这里使用的是Python内置的模块——tkinter。首先来大概看一下tkinter的描述,依旧是先导入然后使用使用help查看,如图所示。我稍微翻译一下DESCRIPTION下面那几段。Tkinter模块提供允许显示,位...

weixin_39608680的博客 512

Python GUI开发实战:Tkinter从入门到项目应用

Tkinter是Python的标准GUI(图形用户界面)库,基于Tcl/Tk构建,无需额外安装即可在大多数Python环境中使用。它以简洁的API和良好的跨平台兼容性,成为快速开发桌面应用的首选工具。要开始使用Tkinter,只需确保Python版本≥3.6,并通过验证环境是否就绪。推荐使用虚拟环境隔离项目依赖,提升可维护性。root.title("环境测试")上述代码可快速验证Tkinter是否正常工作。除了系统预定义的标准事件外,Tkinter还允许开发者创建。

weixin_42181686的博客 1633

Tkinter库运行原理、回调函数和After方法详解

Python Tkinter库的运行机制和常用函数详解示例。 UI界面的主循环、回调函数、事件队列到底在干什么??

千天夜的博客 3164

python学习笔记(三)

python学习笔记(三)jupyter notebook 源代码,用jupyter notebook打开。

多个MOS管并联应用场景的四大要点

动态运行时,阈值电压Vgsth最低的MOS管首先打开,最后关闭。这种MOS管一般会占据更多的开关损耗,并且在开关转换过程中,承担了更高的电应力。

VBsemi的博客 3748

Python GUI开发入门:Tkinter核心控件与布局实战详解

图形用户界面(GUI)开发是桌面应用构建的核心技术,它通过可视化控件实现人机交互。Python作为主流编程语言,其标准库Tkinter提供了轻量级的GUI解决方案,基于事件驱动模型实现界面响应。在快速原型开发和内部工具构建场景中,Tkinter凭借零依赖、学习曲线平缓的优势,成为Python开发者入门GUI的首选。通过掌握按钮、输入框、列表框等核心控件,结合pack、grid、place三种几何管理器进行布局,可以高效构建如登录表单、文本编辑器等实用工具。本文以Tkinter为例,详解控件使用与事件处理,并

weixin_34293141的博客 480

银河麒麟V10安装docker

最近在做的一个信创项目使用的操作系统是银河麒麟高级服务器V10,在安装docker时,会遇到下面的错误。 nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.0-3.el7.x86_64 经过分析,以下依赖包是centos系统中的包,所以需要给kylinos创建一个合适的centos源。经过实验,Kylin Linux Advanced Server V1

m0_38004228的博客 4907

《零依赖也能做桌面应用:Python tkinter 从入门到实战 全指南》

本文介绍了Python内置的轻量级GUI库tkinter,从基础使用到进阶开发。首先概述tkinter作为Python官方标准库的优势:跨平台、零依赖、学习成本低,适合开发小型工具。然后通过"Hello tkinter"示例展示基本用法,详细讲解核心组件体系、布局管理(pack/grid/place)和事件驱动机制。文章还介绍了样式美化、对话框与菜单等标准化交互的实现方式,并通过一个带进度条的下载器案例展示多线程与队列的实际应用。最后探讨了自定义组件、Canvas绘图、打包分发等进阶话题

2401_85727638的博客 1624

TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析

在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类

weixin_42526068的博客 284

告别混乱接线!用EPLAN 3D布局图,手把手教你搞定电气柜的3D建模与自动布线

本文详细介绍了如何使用EPLAN 3D布局图进行电气柜的3D建模与自动布线,帮助工程师告别混乱接线。从项目准备、基础结构建模到智能设备布局与逻辑定义,再到高级布线技术与问题排查,提供了一套完整的实战指南。通过EPLAN的3D功能,显著提升设计效率与系统可靠性。

weixin_30680385的博客 339

Python Tkinter如何处理键盘长按事件_通过定时器实现持续触发

为什么 KeyRelease 比 KeyPress 更适合长按检测因为 Tkinter 的 KeyPress 事件在系统级键盘重复开启后会高频触发(取决于系统设置),但不可控、不一致,且无法区分“刚按下”和“持续按住”。而靠监听 KeyPress + KeyRelease 配合定时器,才能真正掌握按住时长和节奏。第一次触发设为稍长延迟(如 300ms),模拟“按键生效前的等待”,之后再以短间隔(如 80ms)循环每次循环中必须重新调用 self.after(),形成链式调用;

qq_41384740的博客 57

Silvaco TCAD仿真例库——肖特基二极管反向击穿特性(案例)

本文详细解析了使用Silvaco TCAD仿真例库进行肖特基二极管反向击穿特性分析的完整案例。通过构建包含浮空P型保护环的平面结构,重点阐述了针对雪崩击穿仿真的关键步骤,包括高精度网格划分、碰撞电离模型(impact selb)的启用以及反向电压的精细扫描策略。文章深入探讨了漂移区掺杂浓度、保护环设计等参数对击穿电压的影响,并提供了实用的调试心得,旨在帮助工程师精准预测和优化功率肖特基二极管的反向耐压能力。

fire9的博客 724
上一篇: 从开发攻城狮(C++)到测试开发攻城狮(Python)
下一篇: Python中引用、浅拷贝和深拷贝
Sen-Lee
博客等级 码龄16年 61粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值