我正在尝试使用两个登录函数编写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)。
有谁知道如何防止其他功能被触发?谢谢!
答案 0 :(得分:0)
在__init__
方法中,您正在调用您尝试用作回调的方法,而不是简单地传递函数对象。 EX:
command = Verification.verify1(self)
应该是
command = self.verify1
您在verify1
绑定verify2