如何在python中的GUI或窗体中调用新的GUI或窗体?

如何在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

我正在尝试使用python中的套接字编程创建一个简单的聊天服务器。我正在使用Tkinter构建GUI。这是我的问题,我有一个login.py文件,它让我看到了登录的形式。然后我有这个signup.py。现在,当我单击“注册”按钮时,我想从登录表单导航到注册表单。请帮忙!这是我的示例代码。只是为了导航

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()
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.pysignup.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模块的main
Tkinter.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()
第二种方法: 第二种方法是将前一种方法分成两部分