Найти - Пользователи
Полная версия: помогите найти ошибку
Начало » GUI » помогите найти ошибку
1 2 3
Ystritsa
после того как в окне 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()
4kpt
Ystritsa
Ошибка невнимательности:
Что делает строка (особенно последнее присваивание):
but2=Button(win7,text="Закрыть", width=50, height=2, bg="white", fg="blue", command = win7.destroy)
И что
but2.bind("<Button-1>", close)
4kpt
Во вторых. Что за ужас Вы написали в функции close. Да и зачем она вообще??? В ней повсторно создаются пустые окна, потом они же (только что созданные пустые окна) и убиваются. Зачем я Вас учил использовать lambda?
Исправте в функции new6:
but2.bind("<Button-1>", lambda x: win7.destroy())
и в функции next_window2:
but.bind("<Button-1>", lambda x: win1.destroy())
Ystritsa
я тогда не поняла что во всех кнопках надо так писать,исправила но не только же в этом ошибка.я обозначила ms как результат который мы должны получить но оно его в шелле только и выводит.
4kpt
Попробуйте следующий листинг
# -*- 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()
Ystritsa
может у меня чтото с компом или с питоном?теперь в результате получается что вроде бы как и должно в шеле выводится “операция завершена” но в win1: кнопка “закрыть” и цифра-номер курса, которую я вводила, и все(
4kpt
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()
Ystritsa
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())
если я правильно поняла.но все равно вид получается такой(даже если точно также как в вашем последнем скрипте):
4kpt
Значит prob возвращает Вам пустую строку.
Я думал проблема в GUI, но проблема в функции, которая формирует результат.
Смотрим строчку
ms = ms + prob
К переменной ms прибавляется пустая строка, состоящая из кучи пробелов…
Потом ms передается на функцию next_window2, где и выводится.
Что он выведет? Начальное значение ms с большим количеством пустых пробелов в конце.
Поменяйте эту строку на строку
ms = ms +  '|' + i + '  |' + prob + p[int(c_)][i] + "\n"
Только предварительно измените строку
ms = '122'
на
ms = ''
и удалите строку
ms ='122' + c.get()

Ystritsa
просто как видно в шеле оно нормально отражается но не в окне)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB