当前位置:首页 » tkinter » 正文

tkinter,在同一模块下的多窗体操作,不用Toplevel组件,用函数

    还有一种方法,不用Toplevel组件来模拟一下多窗体切换,所有的代码都写在一个模块内,简单的程序也可以采取这种方法。

 在下面的代码里,我把2个窗体写在2个函数里:

        先运行one()函数,展示的是第1个窗体,即登录窗体,

              答对通关密码,就关闭窗体1,运行函数two(),展示窗体2。

              如果不答通关密码,直接退出窗体1,窗体2也不会显示。

    以下是代码:        丶丌皛

from tkinter import *

def one(): # 第1个窗体:登录窗体
    def ok():
        if en1.get()=='wb98.com':
            root1.destroy() # 关闭登录窗体
            two() # 进入第2个窗体:主窗体

    root1=Tk() # 源码来自wb98.com
    root1.title('登录窗口')
    root1.geometry('300x150+888+444')
    la0=Label(root1,text='请输入通关密码 : wb98.com')
    la0.pack()
    en1=Entry(root1)
    en1.pack()
    but1=Button(root1,text=" 确 定 ",command=ok) # 判断密码是否正确
    but1.pack(pady=5)
    # but2=Button(root1,text=" 退 出 ",command=root1.destroy) # 关闭登录窗体
    # but2.pack(pady=5)

    root1.mainloop() # 一直在等待接受窗体1事件,不会进入第2个窗体

def two(): # 第2个窗体:主窗体
    root2=Tk()
    root2.title('主窗口')
    root2.geometry('300x150+888+444')
    la1=Label(root2,text='密码正确,欢迎来到主窗口')
    la1.pack()
    root2.mainloop()

one() # 先进入第一个窗口:登录窗口

运行结果:

未命名.GIF


我们举一反三,把上面的代码改一下,可以由一个主窗口切换到2个(或N个)窗体,同时也可以由这些窗口返回到主窗口来:

from tkinter import *

def main(): # 主窗体   # 源码来自wb98.com
    def goto(num):
        root.destroy() # 关闭主窗体
        if num==1:            
            one() # 进入第1个窗体
        elif num==2:
            two() # 进入第2个窗体

    root=Tk() # 源码来自wb98.com
    root.title('登录窗口')
    but1=Button(root,text="进入 窗口1",command=lambda:goto(1)) # 进入窗口1
    but1.pack(pady=5)
    but2=Button(root,text="进入 窗口2",command=lambda:goto(2)) # 进入窗口2
    but2.pack(pady=5)

    root.mainloop() 

def one(): # 第1个窗体
    def gotomain():
        root1.destroy() # 关闭第1个窗体
        main() # 返回主窗体

    root1=Tk()
    root1.geometry('300x150+888+444')
    la1=Label(root1,text='我是第1窗口',bg='lightgreen').pack(fill=X)
    but3=Button(root1,text="返回主窗体",command=gotomain)
    but3.pack(pady=10)
    root1.mainloop()
    
def two(): # 第2个窗体
    def gotomain():
        root2.destroy() # 关闭第2个窗体
        main() # 返回主窗体
        
    root2=Tk()
    root2.geometry('300x150+888+444')
    Label(root2,text='我是第2窗口',bg='lightblue').pack(fill=X)
    but3=Button(root2,text="返回主窗体",command=gotomain)
    but3.pack(pady=10)
    root2.mainloop()

main() # 先进入主窗口

运行结果

未命名.GIF

此文章来自:wb98.com  网站还有相关的系列课程文章,感兴趣的可以前往。


打赏 支付宝打赏 微信打赏

来源:济亨网

本文链接:https://wb98.com/post/355.html

    << 上一篇 下一篇 >>

    湘公网安备 43011102000514号 - 湘ICP备08100508号