问题:
解决方案1的缺点:代码太长了,想具体修改某段代码得找好久。不推荐。
之后我试了下分开写,然后再LoginPage.py RegisterPage.py在各自的py文件中 import 对方
但是这样会陷入一个循环import的错误.
ImportError: cannot import name 'RegisterPage' from 'RegisterPage' (C:\RegisterPage.py)
在网上虽然没有搜到我需要的解决办法。但是看了很多大神的想法后,我想到了一个新的解决方案。
先看方法一:
解决方案1:把所有页面放在同一.py文件中
from tkinter import *
class LoginPage(object):
"""
登陆页面
"""
def bf_goRegister(self):
"""
跳转函数
"""
self.root.destroy()
RegisterPage()
def __init__(self):
self.root = Tk()
Label(self.root, text="用户").grid(row=0, column=0)
Entry(self.root).grid(row=0, column=1, columnspan=2)
Label(self.root, text="密码").grid(row=1, column=0)
Entry(self.root, show="*").grid(row=1, column=1, columnspan=2)
Button(self.root, text="登陆").grid(row=2, column=1)
Button(self.root, text="注册", command=self.bf_goRegister).grid(row=2, column=2)
self.root.mainloop()
class RegisterPage(object):
"""
注册页面
"""
def bf_goLogin(self):
"""
跳转函数
"""
self.root.destroy()
LoginPage()
def __init__(self):
self.root = Tk()
Label(self.root, text="用户").grid(row=0, column=0)
Entry(self.root).grid(row=0, column=1, columnspan=2)
Label(self.root, text="密码").grid(row=1, column=0)
Entry(self.root, show="*").grid(row=1, column=1, columnspan=2)
Label(self.root, text="确认").grid(row=2, column=0)
Entry(self.root, show="*").grid(row=2, column=1, columnspan=2)
Button(self.root, text="注册").grid(row=3, column=1)
Button(self.root, text="返回", command=self.bf_goLogin).grid(row=3, column=2, )
self.root.mainloop()
if __name__ == '__main__':
LoginPage()
解决方案2:把Page分离开来
用一个主程序控制页面跳转。
1、文件目录
2、Application.py 用来管理页面跳转和程序入口
def go***(self): 函数:就是跳转函数。
首先删除上一个root,然后生成新的root。实现页面跳转。
然后,我们只需要把页面跳转函数传递给Page类中即可。
from tkinter import *
from page.LoginPage import LoginPage
from page.RegisterPage import RegisterPage
class Application(LoginPage, RegisterPage):
def __init__(self):
self.root = Tk()
self.goLogin()
def goLogin(self):
self.root.destroy()
LoginPage.__init__(self, goRegister=self.goRegister)
def goRegister(self):
self.root.destroy()
RegisterPage.__init__(self, goLogin=self.goLogin)
if __name__ == '__main__':
Application()
3、LoginPage.py 用Frame作为容器,Frame设置为Master的子组件。
from tkinter import *
class LoginPage(object):
def bf_goRegister(self):
self.goRegister()
def __init__(self, goRegister):
self.goRegister = goRegister
self.root = Tk()
Label(self.root, text="用户").grid(row=0, column=0)
Entry(self.root).grid(row=0, column=1, columnspan=2)
Label(self.root, text="密码").grid(row=1, column=0)
Entry(self.root, show="*").grid(row=1, column=1, columnspan=2)
Button(self.root, text="登陆").grid(row=2, column=1)
Button(self.root, text="注册", command=self.bf_goRegister).grid(row=2, column=2)
self.root.mainloop()
if __name__ == '__main__':
root = Tk()
LoginPage(None)
root.mainloop()
4、RegisterPage.py 同上
from tkinter import *
class RegisterPage(object):
def bf_goLogin(self):
self.goLogin()
def __init__(self, goLogin):
self.goLogin = goLogin
self.root = Tk()
Label(self.root, text="用户").grid(row=0, column=0)
Entry(self.root).grid(row=0, column=1, columnspan=2)
Label(self.root, text="密码").grid(row=1, column=0)
Entry(self.root, show="*").grid(row=1, column=1, columnspan=2)
Label(self.root, text="确认").grid(row=2, column=0)
Entry(self.root, show="*").grid(row=2, column=1, columnspan=2)
Button(self.root, text="注册").grid(row=3, column=1)
Button(self.root, text="返回", command=self.bf_goLogin).grid(row=3, column=2, )
self.root.mainloop()
if __name__ == '__main__':
root = Tk()
RegisterPage(None)
root.mainloop()