CSDNWV 2021-01-16 23:42 采纳率: 100%
浏览 326
已采纳

tkinter窗口不能够嵌套吗?为什么导入第二个tkinter窗口后点击按钮会无效

  • 第一段是验证码(vcode.py)
  • import string,random
    vcode=''
    words=''.join((string.ascii_letters,string.digits))
    for i in range(6):
        vcode+=random.choice(words)
  •  第二段是登陆界面框架
    • import tkinter as tk
      import vcode
      
      window=tk.Tk()
      window.title("PY系统登陆界面")
      sw=window.winfo_screenwidth()
      sh=window.winfo_screenheight()
      w=310;h=160
      x=(sw-w)/2;y=(sh-h)/2
      window.geometry("%dx%d+%d+%d"%(w,h,x,y))
      
      tk.Label(window,text='用户账号:').grid(row=0,column=0)
      tk.Label(window,text='用户密码:').grid(row=1,column=0)
      tk.Label(window,text='验 证 码:').grid(row=2,column=0)
      tk.Label(window,text='%s'%vcode.vcode).grid(row=3,column=1)
      
      usr=tk.StringVar();pwd=tk.StringVar();vcode=tk.StringVar()
      
      e1=tk.Entry(window,textvariable=usr).grid(row=0,column=1,pady=5)
      e2=tk.Entry(window,textvariable=pwd,show='*').grid(row=1,column=1,pady=5)
      e3=tk.Entry(window,textvariable=vcode).grid(row=2,column=1,pady=5)
      
      def tip():
          print("用户账号:",usr.get())
          print("用户密码:",pwd.get())
      def login():
          import login
          
      loginbt=tk.Button(window,text='注册',width=12,command=login).grid(row=4,column=0,sticky=tk.W,padx=10,pady=10)
      logonbt=tk.Button(window,text='登录',width=12,command=window.destroy).grid(row=4,column=1,sticky=tk.E,padx=10,pady=10)
      
      tk.mainloop()
      
      ​

      第三段(login.py,在第二段中导入的正是这一段)原目的是想加入一个注册的窗口,但是导入后点击注册或者清除都没有反应

    • import tkinter as tk
      
      logwindow=tk.Tk()
      logwindow.title("PY系统账号注册")
      sw=logwindow.winfo_screenwidth()
      sh=logwindow.winfo_screenheight()
      w=310;h=115
      x=(sw-w)/2;y=(sh-h)/2
      logwindow.geometry("%dx%d+%d+%d"%(w,h,x,y))
      
      tk.Label(logwindow,text='用户账号:').grid(row=0,column=0)
      tk.Label(logwindow,text='用户密码:').grid(row=1,column=0)
      
      logusr=tk.StringVar();logpwd=tk.StringVar();
      
      logusre=tk.Entry(logwindow,textvariable=logusr).grid(row=0,column=1,padx=10,pady=5)
      logpwde=tk.Entry(logwindow,textvariable=logpwd).grid(row=1,column=1,padx=10,pady=5)
      
      def tip():
          print("用户账号:",logusr.get())
          print("用户密码:",logpwd.get())
      def cancel():
          logusr.set('')
          logpwd.set('')
      
      tk.Button(logwindow,text='注册',width=12,command=tip).grid(row=3,column=0,sticky=tk.W,padx=10,pady=10)
      tk.Button(logwindow,text='清除',width=12,command=cancel).grid(row=3,column=1,sticky=tk.E,padx=10,pady=10)
      
      tk.mainloop()
      

      (自学阶段实在很多不理解,可轻喷,请各路大神不吝赐教)

  • 写回答

2条回答 默认 最新

  • coagenth 2021-01-19 00:02
    关注

    在你的代码基础上进行修改,结合sqlite3库,将新注册用户存入数据库,根据用户输入情况进行校验。完整代码:

    import random
    import string
    import tkinter as tk
    import sqlite3
    from tkinter.messagebox import showinfo, showwarning, showerror
    window = tk.Tk()
    window.title("PY系统登陆界面")
    sw = window.winfo_screenwidth()
    sh = window.winfo_screenheight()
    w = 310
    h = 160
    x = (sw-w)/2
    y = (sh-h)/2
    window.geometry("%dx%d+%d+%d" % (w, h, x, y))
    
    vcode = ''
    words = ''.join((string.ascii_letters, string.digits))
    for i in range(6):
        vcode += random.choice(words)
    
    tk.Label(window, text='用户账号:').grid(row=0, column=0)
    tk.Label(window, text='用户密码:').grid(row=1, column=0)
    tk.Label(window, text='验 证 码:').grid(row=2, column=0)
    tk.Label(window, text='%s' % vcode).grid(row=3, column=1)
    
    usr = tk.StringVar()
    pwd = tk.StringVar()
    v_code = tk.StringVar()
    
    e1 = tk.Entry(window, textvariable=usr).grid(row=0, column=1, pady=5)
    e2 = tk.Entry(window, textvariable=pwd, show='*').grid(row=1, column=1, pady=5)
    e3 = tk.Entry(window, textvariable=v_code).grid(row=2, column=1, pady=5)
    
    
    def check():
        name = usr.get()
        psw=pwd.get()
        check=v_code.get()
        print("用户账号:", name)
        print("用户密码:",psw )
        conn = sqlite3.connect('users.db')
        cur = conn.cursor()
        sq='select name from users;'
        sq1 = 'select password from users;'
        if name not in [x[0] for x in cur.execute(sq)] or psw not in [x[0] for x in cur.execute(sq1)] or check!=vcode:
            showerror(title='Error',message='Invalid username or password or checkcode! Please input again!')
        else:
            showinfo(title='OK',
                      message=f'Welcome {name}!')
    
    
    def login():
        logwindow = tk.Tk()
    
    
        logwindow.title("PY系统账号注册")
        sw = logwindow.winfo_screenwidth()
        sh = logwindow.winfo_screenheight()
        w = 310
        h = 115
        x = (sw-w)/2
        y = (sh-h)/2
        logwindow.geometry("%dx%d+%d+%d" % (w, h, x, y))
    
        tk.Label(logwindow, text='用户账号:').grid(row=0, column=0)
        tk.Label(logwindow, text='用户密码:').grid(row=1, column=0)
    
        logusr = tk.StringVar()
        logpwd = tk.StringVar()
    
        logusre = tk.Entry(logwindow, textvariable=logusr)
        logusre.grid(
            row=0, column=1, padx=10, pady=5)
        logpwde = tk.Entry(logwindow, textvariable=logpwd)
        logpwde.grid(
            row=1, column=1, padx=10, pady=5)
    
        def tip():
            
            print("用户账号:", logusre.get())
            print("用户密码:", logpwde.get())
            conn=sqlite3.connect('users.db')
            cur=conn.cursor()
            #cur.execute('drop table if exists users;')
            
            cur.execute(
                'create table if not exists users(id integer autoincreament,name text,password text);')
            s2='insert into users(name,password) values(?,?);'
            cur.execute(s2, [logusre.get(), logpwde.get()])
            
            conn.commit()
        
        tk.Button(logwindow, text='注册', width=12, command=tip).grid(
            row=3, column=0, sticky=tk.W, padx=10, pady=10)
        tk.Button(logwindow, text='退出', width=12, command=logwindow.destroy).grid(
            row=3, column=1, sticky=tk.E, padx=10, pady=10)
    
        logwindow.mainloop()
    
    
    loginbt = tk.Button(window, text='注册', width=10, command=login).grid(
        row=4, column=0, sticky=tk.W, padx=8, pady=10)
    logonbt = tk.Button(window, text='登录', width=10, command=check).grid(
        row=4, column=1, sticky=tk.E, padx=8, pady=10)
    logonbt = tk.Button(window, text='退出', width=10, command=window.destroy).grid(
        row=4, column=2, sticky=tk.E, padx=8, pady=10)
    window.mainloop()
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败