当前位置:首页 >> 编程语言 >> 【Python】使用globals()函数成功解决tkinter多个新窗口问题,夏普sh9010c(python tkinter窗口)

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

0evadmin 编程语言 1
文件名:【Python】使用globals()函数成功解决tkinter多个新窗口问题,夏普sh9010c 【Python】使用globals()函数成功解决tkinter多个新窗口问题

我在近期的一个项目(tkinter复刻记事本)上遇到一个很有意思的问题:如何在创建多个新窗口后,每个窗口还能独立运行?当时我尝试几种方法,奈何实力不足,于是便下定结论非使用线程不可,至此头发又少了一撮。直到今天我复盘了一下tkinter创建窗口有哪几种方式时,我在心中默念“早起的虫子被鸟吃......”,于是就顺理成章地解决了多窗口的问题。即使祭出“断子绝孙拳”,还是难不倒他“去骗、去偷袭一个69岁的同志”。于是如何产生新的变量名又成了新的拦路虎,总不能我提前定义好空的变量名吧!这样的话,新窗口个数就会有上限。

今天我非常幸运,我遇到了globals()函数,于是这个“法外狂徒张三”在本篇文章将“判处死刑,反复执行”。

globals()函数简单示例: name = "zhouhua"# 通过globals()函数将字符串作为变量名添加到全局作用域中globals()[name] = "周华"print(zhouhua) # 输出:周华 多个窗口独立运行代码示例: """使用globals()函数成功解决tkinter多个新窗口问题注意:1、Python的注释有两种:一种是单行注释,使用符号'#';另一种是多行注释,使用符号''' '''或""" """2、类的的函数通常叫'xxx方法';变量通常叫'xxx属性'"""# 通配符'*'__all__ = ['main']import tkinter as tkfrom 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 = 0def newWindow():global countcount += 1# 将字符串赋值给变量名buf = f"ui{count}"# 通过globals()函数将字符串作为变量名添加到全局作用域中globals()[buf] = Window()# 主函数def main():pass# 代码测试if __name__ == '__main__':ui = Window()ui.mainloop()else:print(f'导入{__name__}模块') 运行结果

作者:周华

创作日期:2023/11/26

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接