类__init__似乎是在类中启动其他函数?

时间:2014-07-21 21:10:35

标签: class user-interface

我正在尝试使用两个登录函数编写GUI,然后使用一堆小部件编写第三个窗口。我遇到的问题是因为我想获取条目值并从另一个函数中检索它们,我想我应该使用一个类。但是,当我运行我的代码时,它似乎会弹出开始类中的所有其他函数。

import sys
from tkinter import *

class Gui():
    def __init__(self, root):
    self.root=root
    self.entry = Entry(root)
    stvar=StringVar()
    stvar.set("one")

    self.canvas=Canvas(root, width=300, height=300, background='white')
    self.canvas.grid(row=1,column=0, columnspan = 4)

    frame = Frame(self.root)
    frame.grid(row=2,column=0, sticky="s")
    frame2 = Frame(self.root)
    frame2.grid(row=0,column=0, sticky = "n")

    self.option=OptionMenu(frame, stvar, "one", "two", "three")
    label1=Label(frame, text="Stock Mean:").grid(row=2,column=0, sticky="nw")
    label2=Label(frame2, text="Stocks").grid(row=0,column=0,sticky = "w")
    self.option=OptionMenu(frame2, stvar, "StockOne", "StockTwo", "StockThree").grid(row=1, column=0, sticky = "w")
    label3= Label(frame, text="Std Variance").grid(row=2, column=1)
    label4= Label(frame, text="Buy Price").grid(row=2, column=2)
    label5=Label(frame, text="Sell Price").grid(row=2,column=3)
    label6= Label(frame2, text="Auto/Manual").grid(row=0, column=3,sticky= "e")
    labelSpace1 = Label(frame2, text= "                                   ").grid(row=0, column = 1, columnspan = 2)

    label7 = Label(frame, text = "Sample Mean").grid(row = 3, column = 0)
    label8 = Label(frame, text = "Sample Std Variance").grid(row = 3, column = 1)
    label9 = Label(frame, text = "Sample Buy Price").grid(row = 3, column = 2)
    label10 = Label(frame, text = "Sample Sell Price").grid(row = 3, column = 3)

class Verification():

def __init__(self):
    ##First Window
    self.master = master
    label1 = Label(self.master, text = "Username:")
    label1.pack()
    user = Entry(self.master)
    user.pack()
    label2 = Label(self.master, text = "Password:")
    label2.pack()
    password = Entry(self.master)
    password.pack()
    button = Button(self.master, text = "Login", command = Verification.verify1(self))

    self.master.title("Stock Program")
    self.master.geometry("400x500")
    button.pack()


    ##self.master.mainloop()

def verify1(self):
    self.root1=Toplevel(self.master)
    self.root1.title("Stock Broker Login")
    self.root1.geometry("500x500")

    ##Broker Menu
    variable = StringVar(self.root1)
    variable.set("TestOne")
    OPTIONS = ["One" , "Two", "Three", "Four"]
    self.m = OptionMenu(self.root1, variable, OPTIONS)
    self.m.pack()

    ##Login for Broker Account
    label3 = Label(self.root1, text = "Username:")
    label3.pack()
    self.user2 = Entry(self.root1)
    self.user2.pack()
    label4 = Label(self.root1, text = "Password:")
    label4.pack()
    self.password2 = Entry(self.root1)
    self.password2.pack()
    self.user2info = self.user2.get()
    self.pass2info = self.password2.get()

    button2 = Button(self.root1, text = "Login", command =Verification.verify2(self) )
    button2.pack()

##        button3 = Button(self.root1, text = "Close", command =    Verification.closewindow(self))
##        button3.pack()

##    def closewindow(self):
##        self.master.destroy()

def verify2(self):
    ##if (self.user2info)=="Name":
    self.GraphWindow()
    ##print (self.pass2info)

def GraphWindow(self):
    self.root2 =Tk()
    gui =Gui(self.root2)
    ##self.root2.mainloop()





if __name__ == '__main__':
master=Tk()
start = Verification()

master.mainloop()

我使用的第一个代码(避免使用此类)没有遇到此问题,因此只有第一个Login按钮被触发时才会弹出辅助登录窗口(这将触发命令Verify1)。

有谁知道如何防止其他功能被触发?谢谢!

1 个答案:

答案 0 :(得分:0)

__init__方法中,您正在调用您尝试用作回调的方法,而不是简单地传递函数对象。 EX:

command = Verification.verify1(self)

应该是

command = self.verify1

您在verify1绑定verify2

时会犯同样的错误