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

作者通过在Tkinter项目中遇到如何创建多个独立运行窗口的问题,发现使用globals()函数动态为每个新窗口生成独特的变量名,从而实现了窗口间的独立操作。文中详细介绍了如何利用globals()函数以及相关代码示例。
摘要由CSDN通过智能技术生成

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

今天我非常幸运,我遇到了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 ttk


class 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 count
    count += 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

### 回答1: 要在Python Tkinter中创建新窗口,可以使用Toplevel()函数。以下是一个简单的示例代码: ```python import tkinter as tk # 创建主窗口 root = tk.Tk() # 创建新窗口 new_window = tk.Toplevel(root) new_window.title("新窗口") # 在新窗口中添加标签 label = tk.Label(new_window, text="这是一个新窗口") label.pack() # 运行主循环 root.mainloop() ``` 在这个例子中,我们首先创建了一个主窗口。然后,使用Toplevel()函数创建了一个新窗口,并设置了它的标题。接下来,在新窗口中添加了一个标签,并将其打包。最后,我们运行了主循环,以便显示窗口。 希望这个例子能够帮助你创建新窗口。 ### 回答2: 在Python中,Tkinter是一个流行的图形用户界面(GUI)模块。它提供了一组用于创建GUI应用程序的Python语言绑定。 在Tkinter中,要创建新窗口有几个步骤: 1. 导入Tkinter模块和所有需要的库 ```python import tkinter as tk ``` 2.创建主窗口, 并在其上创建按钮,以便单击按钮时打开新窗口。 ```python root = tk.Tk() button = tk.Button(root, text="Open New Window", command=open_new_window) button.pack() root.mainloop() ``` 3.创建open_new_window函数以响应按钮单击事件。这个函数将创建新窗口和其上的其他小部件。 ```python def open_new_window(): # 创建新窗口 new_window = tk.Toplevel(root) # 往新窗口上添加小部件 label = tk.Label(new_window, text="This is a new window!") label.pack() ``` 4.运行程序,单击按钮即可打开新窗口。 以上是创建新窗口的基本步骤。当然,在实际开发中也可以通过Tkinter提供的其他小部件和功能来进一步定制新窗口和GUI应用程序的行为。例如,可以设置新窗口的大小和位置,设置小部件的样式和外观,添加其他交互元素,等等。 ### 回答3: Python Tkinter是一个用于编写图形用户界面的Python库,它提供了一些用于创建GUI的工具和组件,使得用户可以像使用其他编程工具一样,设计出漂亮的用户界面,以及实现各种交互操作。 创建新窗口Python Tkinter的一个很常见的功能,因为它可以通过创建新窗口来实现一些特定的任务和操作。下面就是创建新窗口的详细方法: 1. 导入Tkinter和其他所需的库:在代码的开头先要将Tkinter模块中的所有函数导入,还需要一些其他所需的库。 import tkinter as tk 2. 创建主窗口: root = tk.Tk() 此处是创建了一个名为root的主窗口对象。 3. 创建新窗口按钮: button = tk.Button(root, text="创建新窗口", command=create_window) 在主窗口中创建一个命令为create_window的按钮,点击按钮后即可创建新窗口。其中,create_window是一个新窗口函数。 4. 创建新窗口: def create_window(): window = tk.Toplevel(root) 在create_window函数中创建了一个名为window的新窗口对象,其中Toplevel函数是用来创建新窗口的,并将主窗口root作为参数入,表示新窗口是在主窗口的基础上创建。 5. 新窗口中添加组合: label = tk.Label(window, text="这是新窗口!") label.pack()新窗口中添加一个文本标签,用于显示“这是新窗口!”的文字信息,pack函数是用于将组件放入到新窗口中。 6. 显示主窗口: root.mainloop() 最后,通过调用mainloop函数来显示主窗口和所有子窗口。 通过以上的步骤就可以创建一个简单的新窗口,具体的内容可以根据实际需求进行自定义。Tkinter提供了丰富的组件和工具,可用于创建各类GUI应用程序,包括窗口、文本框、标签、按钮、菜单和滚动条等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值