如何在python中的GUI或窗体中调用新的GUI或窗体?
我正在尝试使用python中的套接字编程创建一个简单的聊天服务器。我正在使用Tkinter构建GUI。这是我的问题,我有一个login.py文件,它让我看到了登录的形式。然后我有这个signup.py。现在,当我单击“注册”按钮时,我想从登录表单导航到注册表单。请帮忙!这是我的示例代码。只是为了导航 login.py如何在python中的GUI或窗体中调用新的GUI或窗体?,python,forms,python-2.7,user-interface,tkinter,Python,Forms,Python 2.7,User Interface,Tkinter,我正在尝试使用python中的套接字编程创建一个简单的聊天服务器。我正在使用Tkinter构建GUI。这是我的问题,我有一个login.py文件,它让我看到了登录的形式。然后我有这个signup.py。现在,当我单击“注册”按钮时,我想从登录表单导航到注册表单。请帮忙!这是我的示例代码。只是为了导航 login.py from Tkinter import * import Signup class Login(): def __init__(self): self.r
from Tkinter import *
import Signup
class Login():
def __init__(self):
self.root = Tk()
self.root.title("Welcome to Login")
self.btnSignup = Button(self.root, text="Not a member? Sign up now!", relief=FLAT,
borderwidth=1, font=("Century Gothic",11,'normal'),
command = self.callSignup, fg="white",bg="#0866c6",
activebackground="#404040",activeforeground="white")
self.btnSignup.place(width = 250, height = 25, x = 10, y = 10)
self.root.mainloop()
def callSignup(self):
self.root.destroy()
self.obj = Signup.signup("james")
self.obj.display()
from Tkinter import *
class signup():
def __init__(self,name):
self.name = name
def display(self):
self.root = Tk()
self.root.title("Welcome " + self.name)
self.root.mainloop()
signup.py
from Tkinter import *
import Signup
class Login():
def __init__(self):
self.root = Tk()
self.root.title("Welcome to Login")
self.btnSignup = Button(self.root, text="Not a member? Sign up now!", relief=FLAT,
borderwidth=1, font=("Century Gothic",11,'normal'),
command = self.callSignup, fg="white",bg="#0866c6",
activebackground="#404040",activeforeground="white")
self.btnSignup.place(width = 250, height = 25, x = 10, y = 10)
self.root.mainloop()
def callSignup(self):
self.root.destroy()
self.obj = Signup.signup("james")
self.obj.display()
from Tkinter import *
class signup():
def __init__(self,name):
self.name = name
def display(self):
self.root = Tk()
self.root.title("Welcome " + self.name)
self.root.mainloop()
当我运行代码时,我可以打开注册表单。但是self.root.destroy()在登录时,py不起作用!请帮帮我!谢谢 我将使用两种方法解决您的问题 因此,基本上,您正在寻找:
- 用户单击“注册”按钮:
- 单击必须提示一个注册窗口:
login.py
和signup.py
模块。我更倾向于从方法开始,因为它有第二个优点,可以简单地解决您的问题。让我们调用我们的模块loginsignup.py
在类的构造函数中,在构造函数中设置框架小部件:
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
为了更好的设计,最好在单独的函数中分离GUI设计,例如,initialize\u membership\u interface()
。当然,必须在上面的构造函数主体中调用此方法:
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
初始化成员资格接口()
实例化2个按钮和一个标签。使用该方法在框架内组织这3个小部件:
def initialize_membership_interface(self):
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = self.signup)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
然后,我们编程第二个方法,例如,signup()
,以绘制第二个GUI来正确显示订阅元素
1。第一个技巧:
但您的问题是如何将self.button\u signup
绑定到signup()
方法。可以使用修改器解决此问题:
self.button_signup = Tkinter.Button(command = self.signup)
2。第二个窍门:
您面临的第二个问题的解决方案是使用以下方法将上面的第二个(最大)窗口显示为第一个(小)窗口的子窗口:
3。完整应用程序:
以下是在单个模块中编码的完整应用程序:
'''
Created on Mar 6, 2016
@author: Bill Begueradj
'''
import Tkinter
class Begueradj(Tkinter.Frame):
'''Define a GUI for membership subscription.
'''
def __init__(self, parent):
'''Set the constructor.
Set the parent Frame widget.
Call initialize_membership_interface() to draw the GUI
'''
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
def initialize_membership_interface(self):
''' Draw a simplistic GUI consisting of 2 buttons.
The user clicks on the sign up button to land on the second
window dedicated for the subscription process.
The user may click on the cancel button to leave
the application.
'''
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = self.signup)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
def signup(self):
'''Design the subscription window.
Bind this child window to the main one using Tkinter.Toplevel()
'''
self.signup_window = Tkinter.Toplevel(self)
self.signup_window.wm_title("Sign up Area")
self.signup_window.grid_rowconfigure(0, weight = 1)
self.signup_window.grid_columnconfigure(0, weight = 1)
# Member's first name
self.label_firstname = Tkinter.Label(self.signup_window,text="First name: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_firstname.grid(row = 0, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_firstname = Tkinter.Entry(self.signup_window)
self.entry_firstname.grid(row = 0, column = 1)
# Member's last name
self.label_lastname = Tkinter.Label(self.signup_window,text="Last name: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_lastname.grid(row = 1, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_lastname = Tkinter.Entry(self.signup_window)
self.entry_lastname.grid(row = 1, column = 1)
# Member's email
self.label_email = Tkinter.Label(self.signup_window,text="Email: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_email.grid(row = 2, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_email = Tkinter.Entry(self.signup_window)
self.entry_email.grid(row = 2, column = 1)
# Member's password
self.label_password = Tkinter.Label(self.signup_window,text="Password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_password.grid(row = 3, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_password.grid(row = 3, column = 1)
# Member's repeat password
self.label_repeat_password = Tkinter.Label(self.signup_window,text="Repeat password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_repeat_password.grid(row = 4, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_repeat_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_repeat_password.grid(row = 4, column = 1)
self.button_submit = Tkinter.Button(self.signup_window,text="Submit",font="Helvetica 10 bold")
self.button_submit.grid(row = 5, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_submit = Tkinter.Button(self.signup_window,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_submit.grid(row = 5, column = 2, sticky = Tkinter.E + Tkinter.W)
def main():
root = Tkinter.Tk()
b = Begueradj(root)
b.mainloop()
# Start of the main program
if __name__ == "__main__":
main()
第二种方法:
第二种方法是将前一种方法拆分为两种独立的方法,即login.py和signup.py,从而尊重您自己的设计
1。signup.py:
在这里,您保留了之前重命名的signup()
方法。为方便起见,通过signup.py
模块中的subscribe()
,但您需要将Tkinter.Frame
小部件传递给此模块唯一类的构造函数,以便能够使用该方法:
2。login.py
from Tkinter import *
import Signup
class Login():
def __init__(self):
self.root = Tk()
self.root.title("Welcome to Login")
self.btnSignup = Button(self.root, text="Not a member? Sign up now!", relief=FLAT,
borderwidth=1, font=("Century Gothic",11,'normal'),
command = self.callSignup, fg="white",bg="#0866c6",
activebackground="#404040",activeforeground="white")
self.btnSignup.place(width = 250, height = 25, x = 10, y = 10)
self.root.mainloop()
def callSignup(self):
self.root.destroy()
self.obj = Signup.signup("james")
self.obj.display()
from Tkinter import *
class signup():
def __init__(self,name):
self.name = name
def display(self):
self.root = Tk()
self.root.title("Welcome " + self.name)
self.root.mainloop()
此模块包含前面的初始化\u成员资格\u接口()
方法
这里的主要技巧是如何绑定signup.py的subscribe()
方法,并成功地将login.py模块的mainTkinter.Frame
小部件传递到按钮\u signup
按钮。这是这样做的:
self.button_signup = Tkinter.Button(self.parent, text = "Sign up", command = signup.Signup(self.parent).subscribe)
3。完整应用程序:
以下是两个模块的内容:
- 注册。py:
'''
Created on Mar 6, 2016
@author: Bill BEGUERADJ
'''
import Tkinter
class Signup(Tkinter.Frame):
def __init__(self, parent):
# This will allow to pass the main Frame widget as an argument
# to Signup class
Tkinter.Frame.__init__(self, parent)
self.parent = parent
def subscribe(self):
self.signup_window = Tkinter.Toplevel(self.parent)
self.signup_window.wm_title("Sign up Area")
self.signup_window.grid_rowconfigure(0, weight = 1)
self.signup_window.grid_columnconfigure(0, weight = 1)
# Member's first name
self.label_firstname = Tkinter.Label(self.signup_window,text="First name: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_firstname.grid(row = 0, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_firstname = Tkinter.Entry(self.signup_window)
self.entry_firstname.grid(row = 0, column = 1)
# Member's last name
self.label_lastname = Tkinter.Label(self.signup_window,text="Last name: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_lastname.grid(row = 1, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_lastname = Tkinter.Entry(self.signup_window)
self.entry_lastname.grid(row = 1, column = 1)
# Member's email
self.label_email = Tkinter.Label(self.signup_window,text="Email: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_email.grid(row = 2, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_email = Tkinter.Entry(self.signup_window)
self.entry_email.grid(row = 2, column = 1)
# Member's password
self.label_password = Tkinter.Label(self.signup_window,text="Password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_password.grid(row = 3, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_password.grid(row = 3, column = 1)
# Member's repeat password
self.label_repeat_password = Tkinter.Label(self.signup_window,text="Repeat password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_repeat_password.grid(row = 4, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_repeat_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_repeat_password.grid(row = 4, column = 1)
self.button_submit = Tkinter.Button(self.signup_window,text="Submit",font="Helvetica 10 bold")
self.button_submit.grid(row = 5, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_submit = Tkinter.Button(self.signup_window,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_submit.grid(row = 5, column = 2, sticky = Tkinter.E + Tkinter.W)
'''
Created on Mar 6, 2016
@author: Bill BEGUERADJ
'''
import Tkinter
import signup
class Begueradj(Tkinter.Frame):
'''Define a GUI for membership subscription.
'''
def __init__(self, parent):
'''Set the constructor.
Set the parent Frame widget.
Call initialize_membership_interface() to draw the GUI
'''
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
def initialize_membership_interface(self):
''' Draw a simplistic GUI consisting of 2 buttons.
The user clicks on the sign up button to land on the second
window dedicated for the subscription process.
The user may click on the cancel button to leave
the application.
'''
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = signup.Signup(self.parent).subscribe)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
def main():
''' Define the main method.
'''
root = Tkinter.Tk()
b = Begueradj(root)
b.mainloop()
# Start of the main application
if __name__ == "__main__":
main()
- login.py
'''
Created on Mar 6, 2016
@author: Bill BEGUERADJ
'''
import Tkinter
class Signup(Tkinter.Frame):
def __init__(self, parent):
# This will allow to pass the main Frame widget as an argument
# to Signup class
Tkinter.Frame.__init__(self, parent)
self.parent = parent
def subscribe(self):
self.signup_window = Tkinter.Toplevel(self.parent)
self.signup_window.wm_title("Sign up Area")
self.signup_window.grid_rowconfigure(0, weight = 1)
self.signup_window.grid_columnconfigure(0, weight = 1)
# Member's first name
self.label_firstname = Tkinter.Label(self.signup_window,text="First name: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_firstname.grid(row = 0, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_firstname = Tkinter.Entry(self.signup_window)
self.entry_firstname.grid(row = 0, column = 1)
# Member's last name
self.label_lastname = Tkinter.Label(self.signup_window,text="Last name: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_lastname.grid(row = 1, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_lastname = Tkinter.Entry(self.signup_window)
self.entry_lastname.grid(row = 1, column = 1)
# Member's email
self.label_email = Tkinter.Label(self.signup_window,text="Email: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_email.grid(row = 2, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_email = Tkinter.Entry(self.signup_window)
self.entry_email.grid(row = 2, column = 1)
# Member's password
self.label_password = Tkinter.Label(self.signup_window,text="Password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_password.grid(row = 3, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_password.grid(row = 3, column = 1)
# Member's repeat password
self.label_repeat_password = Tkinter.Label(self.signup_window,text="Repeat password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_repeat_password.grid(row = 4, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_repeat_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_repeat_password.grid(row = 4, column = 1)
self.button_submit = Tkinter.Button(self.signup_window,text="Submit",font="Helvetica 10 bold")
self.button_submit.grid(row = 5, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_submit = Tkinter.Button(self.signup_window,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_submit.grid(row = 5, column = 2, sticky = Tkinter.E + Tkinter.W)
'''
Created on Mar 6, 2016
@author: Bill BEGUERADJ
'''
import Tkinter
import signup
class Begueradj(Tkinter.Frame):
'''Define a GUI for membership subscription.
'''
def __init__(self, parent):
'''Set the constructor.
Set the parent Frame widget.
Call initialize_membership_interface() to draw the GUI
'''
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
def initialize_membership_interface(self):
''' Draw a simplistic GUI consisting of 2 buttons.
The user clicks on the sign up button to land on the second
window dedicated for the subscription process.
The user may click on the cancel button to leave
the application.
'''
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = signup.Signup(self.parent).subscribe)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
def main():
''' Define the main method.
'''
root = Tkinter.Tk()
b = Begueradj(root)
b.mainloop()
# Start of the main application
if __name__ == "__main__":
main()
请注意,运行我在这里介绍的两个版本的解决方案会产生以下GUI:
如果你想获得与上面截图中相同的按钮视觉效果,你需要使用这个和那个图像
要将这些图片加载到各自的按钮中,首先需要导入:
from PIL import Image, ImageTk
然后,您需要将图像设置为两个按钮的背景:
# Setting images to the buttons
self.img_signup = ImageTk.PhotoImage(Image.open("img.png").resize((100,40),Image.ANTIALIAS))
self.img_cancel = ImageTk.PhotoImage(Image.open("cancel.png").resize((100,40), Image.ANTIALIAS))
self.button_signup = Tkinter.Button(self.parent, image = self.img_signup,command = self.signup)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent, image = self.img_cancel, command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
我将用两种方法解决您的问题 因此,基本上,您正在寻找:
- 用户单击“注册”按钮:
- 单击必须提示一个注册窗口:
login.py
和signup.py
模块。我更倾向于从方法开始,因为它有第二个优点,可以简单地解决您的问题。让我们调用我们的模块loginsignup.py
在类的构造函数中,在构造函数中设置框架小部件:
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
为了更好的设计,最好在单独的函数中分离GUI设计,例如,initialize\u membership\u interface()
。当然,必须在上面的构造函数主体中调用此方法:
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
初始化成员资格接口()
实例化2个按钮和一个标签。使用该方法在框架内组织这3个小部件:
def initialize_membership_interface(self):
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = self.signup)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
然后,我们编程第二个方法,例如,signup()
,以绘制第二个GUI来正确显示订阅元素
1。第一个技巧:
但您的问题是如何将self.button\u signup
绑定到signup()
方法。可以使用修改器解决此问题:
self.button_signup = Tkinter.Button(command = self.signup)
2。第二个窍门:
您面临的第二个问题的解决方案是使用以下方法将上面的第二个(最大)窗口显示为第一个(小)窗口的子窗口:
3。完整应用程序:
以下是在单个模块中编码的完整应用程序:
'''
Created on Mar 6, 2016
@author: Bill Begueradj
'''
import Tkinter
class Begueradj(Tkinter.Frame):
'''Define a GUI for membership subscription.
'''
def __init__(self, parent):
'''Set the constructor.
Set the parent Frame widget.
Call initialize_membership_interface() to draw the GUI
'''
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.initialize_membership_interface()
def initialize_membership_interface(self):
''' Draw a simplistic GUI consisting of 2 buttons.
The user clicks on the sign up button to land on the second
window dedicated for the subscription process.
The user may click on the cancel button to leave
the application.
'''
self.parent.title('Membership Area')
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
self.parent.config(background = "lavender")
self.label_welcome = Tkinter.Label(self.parent,text="Not a member? Please sign up: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_welcome.grid(row = 0, columnspan = 2, stick = Tkinter.E + Tkinter.W)
self.button_signup = Tkinter.Button(self.parent,font="Helvetica 10 bold", text = "Sign up", command = self.signup)
self.button_signup.grid(row = 1, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_signup = Tkinter.Button(self.parent,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_signup.grid(row = 1, column = 1, sticky = Tkinter.E + Tkinter.W)
def signup(self):
'''Design the subscription window.
Bind this child window to the main one using Tkinter.Toplevel()
'''
self.signup_window = Tkinter.Toplevel(self)
self.signup_window.wm_title("Sign up Area")
self.signup_window.grid_rowconfigure(0, weight = 1)
self.signup_window.grid_columnconfigure(0, weight = 1)
# Member's first name
self.label_firstname = Tkinter.Label(self.signup_window,text="First name: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_firstname.grid(row = 0, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_firstname = Tkinter.Entry(self.signup_window)
self.entry_firstname.grid(row = 0, column = 1)
# Member's last name
self.label_lastname = Tkinter.Label(self.signup_window,text="Last name: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_lastname.grid(row = 1, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_lastname = Tkinter.Entry(self.signup_window)
self.entry_lastname.grid(row = 1, column = 1)
# Member's email
self.label_email = Tkinter.Label(self.signup_window,text="Email: ", anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_email.grid(row = 2, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_email = Tkinter.Entry(self.signup_window)
self.entry_email.grid(row = 2, column = 1)
# Member's password
self.label_password = Tkinter.Label(self.signup_window,text="Password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_password.grid(row = 3, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_password.grid(row = 3, column = 1)
# Member's repeat password
self.label_repeat_password = Tkinter.Label(self.signup_window,text="Repeat password: ",anchor=Tkinter.W,background="dark slate gray",foreground="white", font="Helvetica 8 bold")
self.label_repeat_password.grid(row = 4, column = 0, stick = Tkinter.E + Tkinter.W)
self.entry_repeat_password = Tkinter.Entry(self.signup_window, show = "*")
self.entry_repeat_password.grid(row = 4, column = 1)
self.button_submit = Tkinter.Button(self.signup_window,text="Submit",font="Helvetica 10 bold")
self.button_submit.grid(row = 5, column = 0, sticky = Tkinter.E + Tkinter.W)
self.button_cancel_submit = Tkinter.Button(self.signup_window,text = "Cancel",font="Helvetica 10 bold", command = self.parent.quit)
self.button_cancel_submit.grid(row = 5, column = 2, sticky = Tkinter.E + Tkinter.W)
def main():
root = Tkinter.Tk()
b = Begueradj(root)
b.mainloop()
# Start of the main program
if __name__ == "__main__":
main()
第二种方法:
第二种方法是将前一种方法分成两部分