Форум сайта python.su
после того как в окне win7 вводим номер курса и нажимаем кнопку получить, информация о курсе выводится но не в следующем окне win1 а снова таки в шелле.хотя окно win1 появляется и вроде бы все связано но не могу понять что упустила.
from Tkinter import* root = Tk() def close(ev): win1 = Toplevel() win7 = Toplevel() win1.destroy() win7.destroy() def next_window2(ms,event = None): win1 = Toplevel() win1.title("ОНМУ Дистанционное обучение") label2=Label(win1,text="Выберите действие:",justify='left') # метки label2.grid(row=1,column=1,columnspan=2,sticky=N,pady=5) label2.grid(row=7,column=2,sticky='W') but=Button(win1,text="Закрыть", width=50, height=2, bg="white", fg="blue",command = win1.destroy) but.grid(row=1,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>", close) label2['text'] = ms print u'Операция завершена' def get_course(c, win7,ms): c_ = c.get() mdl = MDL() print mdl.conn_xmlrpc(server) courses = ((c_),) p = mdl.get_courses(server) for i in p[int(c_)].keys(): stroka = len(i) prob = ' '*(30 - stroka) print '|'+i+' |'+prob, print p[int(c_)][i] ms = ms + prob win7.destroy() next_window2(ms) def new6(event = None): win7 = Toplevel() win7.title("Ввод данных") lbl1 = Label(win7, text = u"Введите номер курса") lbl1.grid(row=1,column=0,columnspan=2) c = Entry(win7, width="20") c.focus_force() c.grid(row=1,column=2,columnspan=2) but=Button(win7,text="Получить", width=18, height=2,) but.grid(row=2,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>", lambda e: get_course(c, win7,ms)) but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue", command = win7.destroy) but2.grid(row=3,column=2,ipadx=5,padx=10,pady=5) but2.bind("<Button-1>", close) new6() root.mainloop()
Отредактировано Ystritsa (Янв. 3, 2013 14:48:55)
Офлайн
Ystritsa
Ошибка невнимательности:
Что делает строка (особенно последнее присваивание):
but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue", command = win7.destroy)
but2.bind("<Button-1>", close)
Офлайн
Во вторых. Что за ужас Вы написали в функции close. Да и зачем она вообще??? В ней повсторно создаются пустые окна, потом они же (только что созданные пустые окна) и убиваются. Зачем я Вас учил использовать lambda?
Исправте в функции new6:
but2.bind("<Button-1>", lambda x: win7.destroy())
but.bind("<Button-1>", lambda x: win1.destroy())
Офлайн
я тогда не поняла что во всех кнопках надо так писать,исправила но не только же в этом ошибка.я обозначила ms как результат который мы должны получить но оно его в шелле только и выводит.
Отредактировано Ystritsa (Янв. 4, 2013 02:16:52)
Офлайн
Попробуйте следующий листинг
# -*- coding:utf-8 -*- from Tkinter import* root = Tk() def next_window2(ms): win1 = Toplevel() win1.title("ОНМУ Дистанционное обучение") label2=Label(win1,text="Выберите действие:",justify='left') # метки label2.grid(row=1,column=1,columnspan=2,sticky=N,pady=5) label2.grid(row=7,column=2,sticky='W') but=Button(win1,text="Закрыть", width=50, height=2, bg="white", fg="blue") but.grid(row=1,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>", lambda x: win1.destroy()) label2['text'] = ms print u'Операция завершена' def get_course(c, win7, ms): ms += c.get() win7.destroy() next_window2(ms) def new6(event = None): ms = "122" win7 = Toplevel() win7.title("Ввод данных") lbl1 = Label(win7, text = u"Введите номер курса") lbl1.grid(row=1,column=0,columnspan=2) c = Entry(win7, width="20") c.focus_force() c.grid(row=1,column=2,columnspan=2) but=Button(win7,text="Получить", width=18, height=2,) but.grid(row=2,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>", lambda e: get_course(c, win7, ms)) but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue") but2.grid(row=3,column=2,ipadx=5,padx=10,pady=5) but2.bind("<Button-1>", lambda x: win7.destroy()) new6() root.mainloop()
Отредактировано 4kpt (Янв. 4, 2013 11:24:16)
Офлайн
может у меня чтото с компом или с питоном?теперь в результате получается что вроде бы как и должно в шеле выводится “операция завершена” но в win1: кнопка “закрыть” и цифра-номер курса, которую я вводила, и все(
Офлайн
Ystritsa
Совершенно верно…
Т.е. ms выводится в win1.
Я просто поменял определение ms (теперь ms = “122” + c.get()).
Пробуем это:
from Tkinter import* root = Tk() def next_window2(ms): win1 = Toplevel() win1.title("ОНМУ Дистанционное обучение") label2 = Label(win1, justify='left') # метки label2.grid(row=1, column=1, sticky=N, pady=5) but = Button(win1, text="Закрыть", width=50, height=2, bg="white", fg="blue") but.grid(row=2, column=1, ipadx=5, padx=10, pady=5) but.bind("<Button-1>", lambda x: win1.destroy()) label2['text'] = ms print u'Операция завершена' def get_course(c, win7,ms): c_ = c.get() mdl = MDL() print mdl.conn_xmlrpc(server) courses = ((c_),) p = mdl.get_courses(server) for i in p[int(c_)].keys(): stroka = len(i) prob = ' '*(30 - stroka) print '|'+i+' |'+prob, print p[int(c_)][i] ms = ms + prob win7.destroy() next_window2(ms) def new6(event = None): win7 = Toplevel() win7.title("Ввод данных") lbl1 = Label(win7, text = u"Введите номер курса") lbl1.grid(row=1, column=0, columnspan=2) c = Entry(win7, width="20") c.focus_force() c.grid(row=1, column=2, columnspan=2) but=Button(win7, text="Получить", width=18, height=2,) but.grid(row=2, column=2, ipadx=5, padx=10, pady=5) but.bind("<Button-1>", lambda e: get_course(c, win7,ms)) but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue") but2.grid(row=3, column=2, ipadx=5, padx=10, pady=5) but2.bind("<Button-1>", lambda x: win7.destroy()) new6() root.mainloop()
Отредактировано 4kpt (Янв. 4, 2013 16:24:46)
Офлайн
def next_window2(ms): win1 = Toplevel() win1.title("ОНМУ") label2=Label(win1,text="Информация о курсе:") # метки label2.grid(row=1,column=1) label3=Label(win1,text="Инфо:") label3.grid(row=3,column=2) label3['text'] = ms but=Button(win1,text="Закрыть", width=50, height=2, bg="white", fg="blue") # Кнопки but.grid(row=2,column=2,padx=5,pady=5) but.bind("<Button-1>", lambda x: win1.destroy()) print u'Операция завершена' def get_course(c, win7, ms): ms ='122' + c.get() c_ = c.get() mdl = MDL() print mdl.conn_xmlrpc(server) courses = ((c_),) p = mdl.get_courses(server) for i in p[int(c_)].keys(): stroka = len(i) prob = ' '*(30 - stroka) print '|'+i+' |'+prob, print p[int(c_)][i] ms = ms + prob win7.destroy() next_window2(ms) def new6(event = None): ms = '122' win7 = Toplevel() win7.title("Ввод данных") lbl1 = Label(win7, text = u"Введите номер курса") lbl1.grid(row=1,column=0,columnspan=2) c = Entry(win7, width="20") c.focus_force() c.grid(row=1,column=2,columnspan=2) but=Button(win7,text="Получить", width=18, height=2,) but.grid(row=2,column=2,ipadx=5,padx=10,pady=5) but.bind("<Button-1>", lambda e: get_course(c, win7, ms)) but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue") # Кнопки but2.grid(row=3,column=2,ipadx=5,padx=10,pady=5) but2.bind("<Button-1>", lambda x: win7.destroy())
Прикреплённый файлы: рооро.JPG (99,9 KБ)
Офлайн
Значит prob возвращает Вам пустую строку.
Я думал проблема в GUI, но проблема в функции, которая формирует результат.
Смотрим строчку
ms = ms + prob
ms = ms + '|' + i + ' |' + prob + p[int(c_)][i] + "\n"
ms = '122'
ms = ''
ms ='122' + c.get()
Офлайн
просто как видно в шеле оно нормально отражается но не в окне)
Офлайн