Форум сайта python.su
чтобы для каждой кнопки открывалось окно верхнего уровня и была возможность закрытия уже открытого окна если таковое присутствует.в этих окнах верхнего уровня должно быть выполнение функций update_user, get_user и т.д, поэтому я и писала “but2.bind(”<Button-1>“, update_user)”(тоесть заполнение полей-введите айди,имя фамилию….) или как это правильней сказать не знаю-окна должны быть связаны с функциями…
Отредактировано Ystritsa (Дек. 12, 2012 00:52:33)
Офлайн
Если надо, чтобы функция выполнялась по нажатию кнопки…
# -*- coding: utf-8 -*- import Tkinter root = Tkinter.Tk() root.geometry("200x200+0+0") root.focus_force() def func01(event = None): print u"Выполняется функция 01" def func02(event = None): print u"Выполняется функция 02" def func03(event = None): print u"Выполняется функция 03" def new_window(event = None): name = event.widget.cget("text") # Проверка существования окна верхнего уровня и его удаление... if len(root.winfo_children()) > 1: root.winfo_children()[1].destroy() # Проверка существования окна верхнего уровня и его удаление... tp = Tkinter.Toplevel(root) tp.title(name) tp.geometry("200x200+205+0") tp.focus_force() btquit = Tkinter.Button(tp, text=u"Выполнить функцию "+name) btquit.bind("<Button-1>", lambda x: eval("func"+name+"()")) btquit.place(relx=0.5, rely=0.5, anchor= "center") boxdata = Tkinter.IntVar() variant = ["01", "02", "03"] lfr = Tkinter.LabelFrame(root, text=u"Выбор вариантов") lfr.place(relx=0.5, rely=0.5, anchor="center") for name in variant: rb = Tkinter.Button(lfr, text=name, width=10) rb.bind("<Button-1>", new_window) rb.pack() root.mainloop()
Отредактировано 4kpt (Дек. 12, 2012 01:04:27)
Офлайн
Если нужно, чтобы функция выполнялась автоматически, после выбора кнопки, с учетом выбранной кнопки…
# -*- coding: utf-8 -*- import Tkinter root = Tkinter.Tk() root.geometry("200x200+0+0") root.focus_force() def func01(tp = None): lab = Tkinter.Label(tp, text = u"Выполняется функция 01") lab.place(relx = 0.5, rely = 0.5, anchor = "center") def func02(tp = None): lab = Tkinter.Label(tp, text = u"Выполняется функция 02") lab.place(relx = 0.5, rely = 0.5, anchor = "center") def func03(tp = None): lab = Tkinter.Label(tp, text = u"Выполняется функция 03") lab.place(relx = 0.5, rely = 0.5, anchor = "center") def new_window(event = None): name = event.widget.cget("text") # Проверка существования окна верхнего уровня и его удаление... if len(root.winfo_children()) > 1: root.winfo_children()[1].destroy() # Проверка существования окна верхнего уровня и его удаление... tp = Tkinter.Toplevel(root) tp.title(name) tp.geometry("200x200+205+0") tp.focus_force() eval("func"+name+"(tp)") boxdata = Tkinter.IntVar() variant = ["01", "02", "03"] lfr = Tkinter.LabelFrame(root, text=u"Выбор вариантов") lfr.place(relx=0.5, rely=0.5, anchor="center") for name in variant: rb = Tkinter.Button(lfr, text=name, width=10) rb.bind("<Button-1>", new_window) rb.pack() root.mainloop()
Отредактировано 4kpt (Дек. 12, 2012 01:10:51)
Офлайн
благодарю за помощь!!!постараюсь в этом разобраться.
ясно.а у нас все помешаны на дистанционном образовании((
Офлайн
Если будут вопросы по коду - задавайте.
Отвечу завтра.
Ушел спать…
Офлайн
У нас по дистанционке бумаг и проблем больше, чем итоговых выиграшей. Т.е. ты можешь промучаться очень много времени, но при этом получишь столько же денег. Должен будешь сидеть на работе от и до (как и в случае с обычными курсами) оформлять большую кипу бумаг (больше чем при стационаре) и при этом еще дорабатывать дома.
Та ну до свидания. Пусть сами их делают…
Отредактировано 4kpt (Дек. 12, 2012 01:26:51)
Офлайн
если возникнут вопросы задам).Спасибо еще раз и приятных Вам снов.
Офлайн
ну вот у нас есть функция update_user для нее задаем переменные i, f, l которые надо указать обязательно иначе она не запустится. вот я не знаю каким образом задать переменные чтобы потом функция выполнялась при нажатии кнопки “Выполнить”
Прикреплённый файлы:
777777.py (3,1 KБ)
Офлайн
Можно через поля ввода. Сформировать 3 поля ввода. При нажатии кнопки “Выполнить” с этих трех полей ввода снимаются данные инструкцией имя_поля.get(). Результат подставляется в функцию простым вызовом: имя_функции(имя_поля1.get(), имя_поля2.get(), имя_поля3.get()).
Подумайте самостоятельно. Если будет нужен пример - пишите…
Офлайн
я поставила в кусок описывающий функцию строку update_user(i.get(),f.get(),l.get()) и для полей i.get()
f.get() l.get() как Вы сказали но чегото выдает ошибку global name ‘i’ is not defined.что я неправильно сделала?
def update_user(ev): mdl = MDL() print mdl.conn_xmlrpc(server) users = [{ 'id': i, #'username': 'username3', #'password': 'password3', 'firstname': f, 'lastname': l, #'email': 'email3@domain.com', }] update_user(i.get(),f.get(),l.get()) print mdl.update_users(server, users) def new(ev): win2 = Toplevel() win2.title("Ввод данных") lbl1 = Label(win2, text = u"Введите id пользователя") lbl1.grid(row=1,column=0,columnspan=2) lbl2 = Label(win2, text = u"Введите имя пользователя") lbl2.grid(row=2,column=0,columnspan=2) lbl3 = Label(win2, text = u"Введите фамилию пользователя") lbl3.grid(row=3,column=0,columnspan=2) i = Entry(win2, width="20") f = Entry(win2, width="20") l = Entry(win2, width="20") i.grid(row=1,column=2,columnspan=2) f.grid(row=2,column=2,columnspan=2) l.grid(row=3,column=2,columnspan=2) i.get() f.get() l.get() but=Button(win2,text="Выполнить", width=18, height=2,) but.grid(row=4,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>",update_user) win2.mainloop()
Офлайн