【Python】使用globals()函数成功解决tkinter多个新窗口问题

我在近期的一个项目(tkinter复刻记事本)里遇到一个棘手的问题:如何在创建多个新窗口后,每个窗口还能独立运行。当时我尝试如何去解决,但是无果,于是觉得非要使用线程不可,便留了一个坑。直到今天我复盘了一下tkinter创建窗口有哪几种方式时,突然灵光乍现,于是就很顺利的解决的这个多窗口的问题。但是新的问题又出现了,如何产生新的变量名,总不能我提前定义好空的变量名吧!这样的话,新窗口个数就会有上限。

今天我非常幸运,我找到了globals()函数,于是这个坑就在本篇文章给完美填上。

globals()函数简单示例:

name = "zhouhua"# 通过globals()函数将字符串作为变量名添加到全局作用域中
globals()[name] = "周华"print(zhouhua)      # 输出:周华

多个窗口独立运行代码示例:

"""使用globals()函数成功解决tkinter多个新窗口问题注意:1、Python的注释有两种:一种是单行注释,使用符号'#';另一种是多行注释,使用符号''' '''或""" """2、类的的函数通常叫'xxx方法';变量通常叫'xxx属性'"""# 通配符'*'
__all__ = ['main']import tkinter as tk
from tkinter import ttkclass Window(tk.Tk):"""继承tkinter.Tk()方法,创建桌面窗口"""def __init__(self):"""构造方法"""super().__init__()                  # 调用父类(Tk)的构造方法(等价于root = tk.Tk())self.title('自定义标题')             # 窗口标题self.geometry('400x300+400+200')    # 窗口像素大小(400x300)及显示位置(400+200)# 显示文本内容self.showTextButton = tk.Button(self, text='获取文本内容', command=self.showData)self.showTextButton.pack(side=tk.BOTTOM)# 新窗口self.newWindowButton = tk.Button(self, text='新窗口', command=newWindow)self.newWindowButton.pack(side=tk.BOTTOM)# 文本域self.text = tk.Text(self, background='pink', font=('Tahoma', 16))self.text.pack(fill=tk.BOTH, expand=True)self.text.bind('<KeyRelease>', self.getTextData)    # 捆绑按键释放事件self.text.focus_set()                               # 设置焦点# 显示文本内容def showData(self, event=None):self.newWin = tk.Toplevel()                 # 创建新窗口self.newWin.title('自定义标题')              # 窗口标题self.newWin.geometry('300x200+450+240')     # 窗口像素大小(300x200)及显示位置(450+240)self.newWin.focus_set()                     # 设置焦点# 标签self.dataLabel = ttk.Label(self.newWin, text=self.text.get('1.0', tk.END), anchor='nw', relief=tk.GROOVE)self.dataLabel.pack(fill=tk.BOTH, expand=True)# 关闭self.closeButton = ttk.Button(self.newWin, text='关闭', command=self.newWin.destroy)self.closeButton.pack(side=tk.BOTTOM)# 获取文本域数据def getTextData(self, event=None):print([self.text.get('1.0', tk.END)])# 新窗口
count = 0
def newWindow():global countcount += 1# 将字符串赋值给变量名buf = f"ui{count}"# 通过globals()函数将字符串作为变量名添加到全局作用域中globals()[buf] = Window()# 代码测试
if __name__ == '__main__':ui = Window()ui.mainloop()
else:print(f'导入{__name__}模块')
运行结果

作者:周华

创作日期:2023/11/26

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/221279.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习JavaScript--JavaScript中的对象原型

JavaScript中的对象原型是理解该语言核心概念的关键之一。本文将深入探讨JavaScript对象原型的作用、使用方法以及与继承相关的重要概念。通过详细的示例代码和全面的讲解&#xff0c;将能够更好地理解和运用JavaScript对象原型&#xff0c;提高代码的可维护性和扩展性。 Java…

rust tokio select!宏详解

rust tokio select!宏详解 简介 本文介绍Tokio中select!的用法&#xff0c;重点是使用过程中可能遇到的问题&#xff0c;比如阻塞问题、优先级问题、cancel safe问题。在Tokio 中&#xff0c;select! 是一个宏&#xff0c;用于同时等待多个异步任务&#xff0c;并在其中任意一…

一、Lua基础

文章目录 一、Lua是什么二、Lua特性&#xff08;一&#xff09;轻量级&#xff08;二&#xff09;可扩展&#xff08;三&#xff09;其它特性 三、Lua安装四、Lua应用 看到评论说&#xff0c;C让我见识了语言的严谨与缜密&#xff0c;lua让我见识到了语言的精巧与创新&#xff…

最新AI创作系统ChatGPT系统运营源码+DALL-E3文生图+支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞

C语言实现万年历 前言&#xff1a;本文章向大家介绍如何使用C语言代码实现万年历使用实例&#xff0c;讲解编写万年历的方法&#xff0c;教你轻松学会写出万年历。这个小程序算是我自己写的第一个比较完整的小程序&#xff0c;算是对大一上学期学习的C语言程序设计基础的一个总…

Flask学习二:项目拆分、请求与响应、cookie

教程 教程地址&#xff1a; 千锋教育Flask2框架从入门到精通&#xff0c;Python全栈开发必备教程 老师讲的很好&#xff0c;可以看一下。 项目拆分 项目结构 在项目根目录下&#xff0c;创建一个App目录&#xff0c;这是项目下的一个应用&#xff0c;应该类似于后端的微服…

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be&#xff08;am/is/are&#xff09;going to do … 计划,…

类与对象(下)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&a…

windows下docker环境搭建与运行实战

背景 学习docker使用&#xff0c;需要环境&#xff0c;今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞&#xff0c;主要是企业内部服务器&#xff0c;都是跟公网隔离的&#xff0c;没有访问公网权限&#xff0c;所以镜像什么的&#xff0c;从公网拉取完全没…

056-第三代软件开发-软件打包

第三代软件开发-软件打包 文章目录 第三代软件开发-软件打包项目介绍软件打包1 下载 linuxdepoyqt 工具2 安装 linuxdepoyqt3 qmake配置4 打包程序 总结 关键字&#xff1a; Qt、 Qml、 linuxdeployqt、 Ubuntu、 AppImage 项目介绍 欢迎来到我们的 QML & C 项目&…

如果客户端同时有ipv4和ipv6,浏览器是如何选择用哪种ip

在互联网协议&#xff08;IP&#xff09;的发展历程中&#xff0c;IPv4和IPv6是两种主要的版本。对于一个客户端来说&#xff0c;同时拥有IPv4和IPv6的能力是常见的情况。那么&#xff0c;当一个客户端同时具有IPv4和IPv6的能力时&#xff0c;浏览器是如何选择使用哪种IP进行通…

pygame加载图像,并让小球做平抛运动

文章目录 load转换和存储自由落体 在游戏设计中&#xff0c;图像显示是必不可少的功能&#xff0c;pygame中的image模块便用于加载图像。 load 通过load函数&#xff0c;可以加载多种图像格式&#xff0c;如下表所示 旧版本bmp, gpeg, png, pcx, tiff, xpmc, lbm(以及pbm, p…