class App: def __init__(self, master): self.frame = Frame(master) self.frame.pack() self.var = StringVar() self.data_queue = Queue() self.button = Button(self.frame, text=self.var) self.button.pack(side=LEFT) # start the "fetch" thread (just generate data from the clock) self.stop_thread = False self.thread = Thread(target=self.get_data, args=("DATA thread", self.data_queue)) self.thread.start() # when user clicks "close" widget, call self.stop_all() master.protocol("WM_DELETE_WINDOW", self.stop_all ) self.frame.after(500, self.updater) def get_data(self, threadname, q): while not self.stop_thread: a = str(time.time()) self.data_queue.put(a) print(f'get_data: put "{a}" to queue') time.sleep(3) def updater(self): while not self.data_queue.empty(): var = self.data_queue.get() print(f'updater: got {var}') self.frame.after(500, self.updater) # call again after 500ms def stop_all(self): """Catch the "window close event". We must kill the thread and then call normal quit() function. """ self.stop_thread = True self.thread.join() # wait for thread to stop self.frame.quit() # call normal frame quit()
def quit(self, event=None): Frame.quit(self)
def quit(self): if askyesno("Verify Quit", "Do you really want to quit?"): Frame.quit(self)
def quit(self): "Stop everything and quit." self.stop(wait=False) Frame.quit(self)
def quit(self): ans = askokcancel('Verify exit', "Really quit?") if ans: Frame.quit(self)
def quit(self): """ Quits the application after requesting confirm """ if askyesno('Verify quit', 'Are you sure you want to quit?'): Frame.quit(self)
class Login(): """登录""" def __init__(self, master=None): if self.isLoggedIn() is True: MainPage(master) else: self.root = master self.root.title("账号登陆") set_window_center(self.root, 300, 180) # 定义变量 self.username = StringVar() self.password = StringVar() self.init_menu() self.init_page() def init_page(self): """登录界面""" self.page = Frame(self.root) # 创建Frame self.page.pack() Label(self.page).grid(row=0, stick="W") Label(self.page, text="账户: ").grid(row=1, stick="W", pady=10) username = Entry(self.page, textvariable=self.username) username.grid(row=1, column=1, stick="E") username.bind("<Return>", self.returnEnvent) Label(self.page, text="密码: ").grid(row=2, stick="W", pady=10) password = Entry(self.page, textvariable=self.password, show="*") password.grid(row=2, column=1, stick="E") password.bind("<Return>", self.returnEnvent) button_login = Button(self.page, text="登陆", command=self.doLogin) button_login.grid(row=3, column=1, stick="W", pady=10) button_cancel = Button(self.page, text="退出", command=self.doCancel) button_cancel.grid(row=3, column=1, stick="e") def init_menu(self): """创建菜单栏""" menubar = Menu(self.root) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="退出", command=self.root.quit) menubar.add_cascade(label="文件", menu=filemenu) self.root.config(menu=menubar) def doLogin(self): username = self.username.get() password = self.password.get() res = dbcontent.user_login(username, password) if res is True: # if username == "admin" and password == "admin": # 测试账号 self.page.destroy() glv.set_variable("CURRENT_USER_NAME", str(username)) MainPage(self.root) else: messagebox.showinfo(title="错误", message="账号或密码错误!") def doCancel(self): self.page.quit() def returnEnvent(self, event): self.doLogin() def isLoggedIn(self): # return True return False
def quitter(self): if askyesno("Confirmation", f"Voulez-vous vraiment fermer {self.nom_editeur} ?"): Frame.quit(self)
def quit( self ): # Fecha o programa Frame.quit( self )
class LoginGUI: frame = None password = tk.StringVar() # defines the widget state as string ID = tk.StringVar() remember_me = tk.BooleanVar() def __init__(self, root): self.root = root root.option_readfile('Appdata/option') root.title("Login to manage") self.frame = Frame(self.root, borderwidth=5) tk.Label(self.frame, text=" Adminstration:").grid(row=1, column=1) tk.Entry(self.frame, width=20, textvariable=self.ID).grid(row=1, column=2, columnspan=2) #Password tk.Label(self.frame, text=" Password:"******"*", textvariable=self.password).grid(row=2, column=2, columnspan=2) #Remember tk.Checkbutton(self.frame, text="Remember", variable=self.remember_me).grid(row=3, column=1) self.remember_me.set(False) tk.Button(self.frame, text="Login", command=self.Login).grid(row=3, column=3) tk.Label(self.frame, text=" ").grid(row=2, column=4) tk.Label(self.frame, text=" ").grid(row=1, column=4) self.frame.pack() def getInfo(self): querry = "SELECT * FROM Acc" result = ketNoiSql.execute(querry) info = None for row in result: if (str(row[0]) == self.ID.get()): info = row break return info def Login(self): info = self.getInfo() if ((info == None or self.password.get() == None or self.ID.get() == None) or (str(info[0]) != self.ID.get() and str(info[1]) != self.password.get())): noti = Label(self.frame, text=" Sai", fg='red').grid(row=1, column=4) noti = Label(self.frame, text=" Sai", fg='red').grid(row=2, column=4) else: if str(info[0]) == self.ID.get() and str( info[1]) != self.password.get(): noti = Label(self.frame, text=" OK ", fg='blue').grid(row=1, column=4) noti = Label(self.frame, text=" Sai", fg='red').grid(row=2, column=4) if str(info[0]) == self.ID.get() and str( info[1]) == self.password.get(): noti = Label(self.frame, text=" OK ", fg='blue').grid(row=1, column=4) noti = Label(self.frame, text=" OK ", fg='blue').grid(row=2, column=4) ketNoiSql.close() self.frame.quit() self.destroy() def destroy(self): self.root.destroy() # close the current window
def quitter(self): if askyesno( 'Confirmation', 'Voulez-vous vraiment fermer {0} ?'.format(self.nom_editeur)): Frame.quit(self)