【Python】线程threading与GUI窗口tkinter结合应用

这篇具有很好参考价值的文章主要介绍了【Python】线程threading与GUI窗口tkinter结合应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python的threading模块是一个强大的工具,它提供了高级别的线程编程接口。通过这个模块,Python程序员可以在应用程序中实现多线程并发执行。

线程(Thread)是程序执行流的最小单元,被包涵在进程之中,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

作者发炎

当我们用tkinter设计开发桌面程序时,不免需要一个或多个线程执行其他任务,例如:显示实时显示时间日期、动态背景、滚动字幕、插件启动与关闭、后台数据监控等......

在本篇文章结合线程threading与窗口tkinter简单设计一个桌面程序显示滚动字幕和显示时间。

运行结果

Thread-1 启动
Thread-2 启动
Thread-2 关闭
Thread-1 关闭

【Python】线程threading与GUI窗口tkinter结合应用,Python 解决方案,python,开发语言,windows,tkinter,threading

【Python】线程threading与GUI窗口tkinter结合应用,Python 解决方案,python,开发语言,windows,tkinter,threading

代码示例

"""
    桌面程序
"""

# 通配符 "*"
__all__ = ['MyApp', 'ScrollTitle', 'StatusBar']
__all__.extend(['SCROLL_TITLE', 'TITLE_FLAG', 'STATUS_FLAG'])

# 导入内置模块
import tkinter as tk
from threading import Thread, Lock
import time


# 全局变量
SCROLL_TITLE = ''       # 滚动标题内容
TITLE_FLAG = True       # 滚动标题旗帜
STATUS_FLAG = True      # 状态栏旗帜


class MyApp(tk.Tk):
    """ 继承tk.Tk, 设计我的桌面程序 """
    def __init__(self):
        """ 重写父类的构造方法 """
        # 调用父类的构造方法
        super().__init__()

        """ 开始对我的桌面程序功能进行设计 """

        self.title('我的桌面程序')
        self.geometry('400x300')
        self.status = tk.Label(self, relief='groove')
        self.status.pack(side='bottom', fill='both')
        self.thread_quit = tk.Button(self, text='结束子线程', command=self.quit_thread)
        self.thread_quit.pack(expand=True)


        global SCROLL_TITLE
        SCROLL_TITLE = '欢迎使用我的程序'

        self.title_lock = Lock()      # 创建互斥锁
        # 创建子线程1,执行任务
        self.scroll_title = ScrollTitle(self.title, self.title_lock)
        self.scroll_title.start()     # 启动子线程任务

        self.time_lock = Lock()       # 创建互斥锁
        # 创建子线程2,执行任务
        self.status_Bar = StatusBar(self.status, self.time_lock)
        self.status_Bar.start()       # 启动子线程任务


    def quit_thread(self):
        """ 结束子线程执行任务 """
        global TITLE_FLAG, STATUS_FLAG
        # 结束
        if TITLE_FLAG:
            TITLE_FLAG = False      # 结束滚动标题线程运行
            STATUS_FLAG = False     # 结束状态栏显示时间线程运行
            self.thread_quit.configure(text='开启子线程')
        else:
            TITLE_FLAG = True       # 开启滚动标题线程运行
            STATUS_FLAG = True      # 开启状态栏显示时间线程运行
            self.thread_quit.configure(text='开启子线程')
            # 创建子线程1,执行任务
            self.scroll_title = ScrollTitle(self.title, self.title_lock)
            self.scroll_title.start()  # 启动子线程任务
            # 创建子线程2,执行任务
            self.status_Bar = StatusBar(self.status, self.time_lock)
            self.status_Bar.start()  # 启动子线程任务


class ScrollTitle(Thread):
    """ 继承Thread, 设计滚动标题 """
    def __init__(self, title, lock, name=None):
        """ 重写父类的构造方法 """
        # 调用父类的构造方法
        super().__init__()

        """ 开始对滚动标题进行设计 """

        self.scroll_title = title   # 标题对象
        self.lock = lock            # 互斥锁对象
        if name: self.name = name   # 子线程名字

    def run(self):
        """ 重写父类的run方法 """

        print(self.name, '启动')

        # 执行任务
        while True:
            self.lock.acquire()         # 上锁

            # 修改数据
            for i in range(len(SCROLL_TITLE)):
                self.scroll_title(f'{SCROLL_TITLE[i::]}{" "*3}{SCROLL_TITLE[:i:]}')
                time.sleep(1)
                # 退出条件
                if not TITLE_FLAG:
                    self.lock.release()  # 解锁
                    print(self.name, '关闭')
                    return

            self.lock.release()         # 解锁


class StatusBar(Thread):
    """ 继承Thread, 设计状态栏显示时间 """

    def __init__(self, status, lock, name=None):
        """ 重写父类的构造方法 """
        # 调用父类的构造方法
        super().__init__()

        """ 开始对状态栏显示时间进行设计 """

        self.status = status  # 状态栏对象
        self.lock = lock            # 互斥锁对象
        if name: self.name = name   # 子线程名字

    def run(self):
        """ 重写父类的run方法 """

        print(self.name, '启动')

        # 执行任务
        while True:
            if not STATUS_FLAG: break  # 退出条件

            self.lock.acquire()  # 上锁

            # 状态栏显示时间
            self.status.config(text=f'{time.strftime("%c")}')

            self.lock.release()  # 解锁

        print(self.name, '关闭')


# 代码测试
if __name__ == '__main__':
    ui = MyApp()        # 实例化桌面程序
    ui.mainloop()       # 循环窗口运行
else:
    print(f'导入【{__name__}】')

作者:周华

创作日期:2024/1/17文章来源地址https://www.toymoban.com/news/detail-803000.html

到了这里,关于【Python】线程threading与GUI窗口tkinter结合应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python制作简易计算器(GUI)---Tkinter

    tkinter模块是Python标准的TK GUI工具包接口,可以实现一些较为简单GUI的创建。 麻雀虽小,五脏俱全 TK工具集使用TCL(Tool Command Language)语言开发 运行相同的程序时,运行速度快于pyqt5 组件能满足基本使用 程序界面较简陋 开发时,使用的语句更短更易懂 Python内置的标准库 Qt框

    2024年02月08日
    浏览(26)
  • Python的GUI编程库Tkinter的学习

    GUI编程 就像是 搭积木 一样,把库里一个个的组件填好参数放到一个主体里面,最终形成一个可用的用户界面。 总体的流程大概是如此这般: 导入库- 创建主体对象 - 组装库中的组件放入到主体对象里。 Tkinter 内置到python的安装包里,可以不用下载直接使用。 导入库 如下:

    2024年02月21日
    浏览(18)
  • python中tkinter实现GUI程序:三个实例

    Python作为一种多功能、易于学习的编程语言,不仅仅在数据科学、机器学习、网络开发等领域大放异彩,也在图形用户界面(GUI)开发中扮演着重要角色。其中,Tkinter库作为Python的标准GUI库,以其简单易用而广受欢迎。 一位粉丝希望了解,如何实战python中tkinter如何实现GUI程

    2024年02月03日
    浏览(16)
  • 基于Python+Tkinter GUI 的模式识别水果分类小程序

      采用Python语言编写,并结合Tkinter GUI工具制作交互式小程序开发,实现了简单的水果的边缘提取和分类。如图1-A,用户可以自定义选择路径并输出,同时可以在对话框中输入/输出结果,如图1-B。 A 界面展示 B 交互展示   图1 Tkinter GUI 展示 本次课程实践一整体设计分为三个部

    2024年02月09日
    浏览(27)
  • Python创建一个GUI(Tkinter)选择文件的界面获取文件路径

    1、点击【选择路径可以选择文件】 2、【确定(开始执行)】 这个按钮没有绑定函数,大家可以根据自己的需求绑定函数

    2024年02月11日
    浏览(29)
  • Python tkinter(GUI编程)模块教程:打造出精美图形用户界面

    随着程序越来越复杂,命令行已经无法满足我们的需求,图形化界面已成为当前主流的界面设计。在Python中,tkinter是一种简单易用的GUI编程工具,可以帮助我们快速地创建图形用户界面。本文将通过实例详细介绍如何使用Python tkinter模块来打造出精美的图形用户界面。 安装

    2024年02月13日
    浏览(17)
  • Python GUI界面界面—tkinter,学习、复习、查阅,这一篇就够了

            PythonGUI程序界面设计tkinter优点:无需另外下载,是自带的、操作简单、易方便;                                                          缺点:界面控件较少,页面不够美观 注:一般来说做小软件tkinter足够了(页面可以用ttkbootstrap美化

    2024年01月17日
    浏览(12)
  • 《零基础入门学习Python》第073讲:GUI的终极选择:Tkinter10

    我们不难发现,几乎每一个应用程序都有一些相同的地方,比如说:标题栏、状态栏、边框、滚动条、工作区。还有的就是 菜单。 传统的菜单有大家熟悉的 File,Edit,Help等,点开之后,是下拉菜单,今天我们就来学习使用 tkinter 如何制作这样子的菜单。tkinter 提供了一个叫

    2024年02月15日
    浏览(18)
  • Python进阶知识(2)—— 什么是GUI编程?一起来学习用Python,Tkinter“做画”吧

    All things are difficult before they are easy. 凡事必先难后易。 GUI是Graphical User Interface(图形用户界面)的缩写 。它是指通过图形化的方式,为人们提供更加友好、直观的用户界面,使得用户可以通过鼠标和键盘等外设更加轻松、快捷地操作计算机。在GUI界面中,计算机会呈现出各种

    2024年02月05日
    浏览(16)
  • 《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7

    上节课我们介绍了Text组件的Indexs 索引和 Marks 标记,它们主要是用于定位,Marks 可以看做是特殊的 Indexs,但是它们又不是完全相同的,比如在默认情况下,你在Marks指定的位置中插入数据,Marks 的位置会自动发生改变, 因为Marks 认它后面的“那个家伙”,当 Marks 前面的数据

    2024年02月15日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包