tkinter 实现窗口切换

使用tkinter实现窗口切换可以通过以下步骤实现:

 

 

创建主窗口root和第一个子窗口win1

 

创建切换按钮并绑定点击事件,点击按钮后销毁当前窗口并创建新的子窗口

 

在新的子窗口中添加返回按钮,点击返回按钮后销毁当前窗口并恢复到主窗口

以下是示例代码:

import tkinter as tk

# 创建主窗口

root = tk.Tk()

# 创建第一个子窗口

win1 = tk.Toplevel(root)

win1.title('窗口1')

win1.geometry('200x100')

# 创建切换按钮

btn_switch = tk.Button(win1, text='切换窗口', command=lambda: switch_window(win1))

btn_switch.pack(pady=10)

def switch_window(old_win):

    # 销毁当前窗口

    old_win.destroy()

    # 创建新的子窗口

    win2 = tk.Toplevel(root)

    win2.title('窗口2')

    win2.geometry('200x100')

    # 添加返回按钮

    btn_return = tk.Button(win2, text='返回', command=lambda: switch_window(win2))

    btn_return.pack(pady=10)

# 运行主窗口

root.mainloop()

参数说明:

 

 

 

Toplevel: 创建一个子窗口,和主窗口类似,但不需要指定Tk()对象,只需要指定父级窗口即可。

 

title: 设置窗口标题。

 

geometry: 设置窗口大小和位置。

 

Button: 创建按钮,可以设置按钮的文本和点击事件,其中command参数接受一个函数,当按钮被点击时会调用该函数。

 

pack: 将组件放置在父级容器中,可以设置组件的位置和间距。

使用dataclass可以更加简化代码。dataclass是Python 3.7中新增的一个装饰器,它可以自动为类生成__init__、__repr__等方法,避免了手动编写这些方法的工作。以下是使用dataclass改写后的代码:

from dataclasses import dataclass

import tkinter as tk

@dataclass

class Window:

    title: str

    size: str

    def __post_init__(self):

        self.win = tk.Toplevel()

        self.win.title(self.title)

        self.win.geometry(self.size)

        if self.title != '主窗口':

            btn_return = tk.Button(self.win, text='返回', command=lambda: self.win.destroy())

            btn_return.pack(pady=10)

        btn_switch = tk.Button(self.win, text='切换窗口', command=self.switch_window)

        btn_switch.pack(pady=10)

    def switch_window(self):

        old_win = self.win

        old_win.destroy()

        if self.title == '窗口1':

            Window('窗口2', '200x100')

        else:

            Window('窗口1', '200x100')

root = tk.Tk()

Window('主窗口', '200x100')

root.mainloop()

通过@dataclass装饰器可以定义一个简单的数据类Window,其中包含窗口的标题和大小。在类的__post_init__方法中生成窗口,添加按钮并绑定事件。当点击切换按钮时,销毁旧窗口并创建新窗口,实现了窗口的切换。使用dataclass可以避免大量的重复代码,使得代码更加简洁。

你可能感兴趣的:(python移动开发,python,图形渲染)