Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 16, 2013 13:56:49

fedor
Зарегистрирован: 2013-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание окна ввода чисел

Здравствуйте.
Пытаюсь написать програмку считающую формулу по вводимым параметрам чисел. Столкнулся с проблемой что не выводятся окна ввода параметров. А именно для этого решил использовать однострочное текстовое поле. Но по какой-то причине оно не выводится и вообще подойдет оно для ввода чисел?. Подскажите что не так делаю. Заранее спасибо
(Python 2*)

# -*- coding: cp866 -*-
from Tkinter import *

window = Tk()
window.title(u'Оценка достоверности функционирования сетевого элемента телекоммуникационной сети')
label = Label(window, text = u'Оценка достоверности функционирования \n сетевого элемента телекоммуникационной сети')
label.config(fg = ‘blue’, font = ('Georgia', 8, ‘italic’))
label.pack()
class label1:
def __init__(self):
self.lab = Label (window, text = u'X=')
self.lab.config(fg = ‘red’, font = ('Georgia', 8, ‘italic’))
self.lab.pack()

obj = label1()

ent = Entry(window,width=20,bd=3)

class label2:
def __init__(self):
self.lab = Label (window, text = u'Y=')
self.lab.config(fg = ‘red’, font = ('Georgia', 8, ‘italic’))
self.lab.pack()
obj = label2()

ent = Entry(window,width=20,bd=3)

class label3:
def __init__(self):
self.lab = Label (window, text = u'Z=')
self.lab.config(fg = ‘red’, font = ('Georgia', 8, ‘italic’))
self.lab.pack()

obj = label3()

ent = Entry(window,width=20,bd=3)

class But1:
def __init__(self):
self.but = Button(window, text = u'Посчитать',width=10,height=1,bg=“white”,fg=“blue”, command = window.quit)
self.but.pack(expand=YES, fill=X)
obj = But1()

window.mainloop()

Отредактировано fedor (Ноя. 16, 2013 14:14:41)

Офлайн

#2 Ноя. 16, 2013 14:22:57

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

создание окна ввода чисел

По Вашему посту:
- Вы считаете, что размещать его не надо?

Теперь вообще:
1. Оберните код в теги. Сложно разобраться с отступами.
2. Код не очень. Уберите class, если не знаете, как им в событийных системах пользоваться. На первых порах можно и без него. Это нормально.
3. Неверно и так уже не пишут

 # -*- coding: cp866 -*-

Правильно будет так.

# coding: utf-8

4. Эту инструкцию использовать нельзя.

from Tkinter import *

Могу дать ссылку пост, где я это подробно описывал. Даже с кучей примеров и кучей пояснений.

5. Не нужно так делать. Этот механизм предназначен для другого…

label.config()

6. И самое незначительное. Принято корневое окно называть root

Будут вопросы, пишите.

Отредактировано 4kpt_II (Ноя. 16, 2013 14:27:33)

Офлайн

#3 Ноя. 16, 2013 15:43:52

fedor
Зарегистрирован: 2013-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание окна ввода чисел

# coding: utf-8
from Tkinter import *
root = Tk()
root.title(u'Оценка достоверности функционирования сетевого элемента телекоммуникационной сети')
label = Label(root, text = u'Оценка достоверности функционирования \n сетевого элемента телекоммуникационной сети')
label.config(fg = 'blue', font = ('Georgia', 8, 'italic'))
label.pack()
label1 = Label (root, text = u'X=')
label1.config(fg = 'red', font = ('Georgia', 8, 'italic'))
label1.pack()
ent = Entry(root,width=20,bd=3)
label2 = Label (root, text = u'Y=')
label2.config(fg = 'red', font = ('Georgia', 8, 'italic'))
label2.pack()
ent = Entry(root,width=20,bd=3)
label3 = Label (root, text = u'Z=')
label3.config(fg = 'red', font = ('Georgia', 8, 'italic'))
label3.pack()
ent = Entry(root,width=20,bd=3)
button = Button(root, text = u'Посчитать',width=10,height=1,bg="white",fg="blue", command = root.quit)
button.pack(expand=YES, fill=X)
root.mainloop()

Да канечно же ссылки буду не лишними, обязательно прочту

Отредактировано fedor (Ноя. 16, 2013 15:45:07)

Офлайн

#4 Ноя. 16, 2013 17:16:39

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

создание окна ввода чисел

Ссылка на тему Смотрите с середины
Далее. По Вашему вопросу. Я же уже ответил.

# coding: utf-8
import Tkinter
import tkFont
#
def quit():
    root.destroy()
#
root = Tkinter.Tk()
root.title(u'Оценка достоверности функционирования сетевого элемента телекоммуникационной сети')
fnt = tkFont.Font(family='Georgia', size=8, slant='italic') # Соберите шрифт один раз...
#
label = Tkinter.Label(root, text=u'Оценка достоверности функционирования \n сетевого элемента телекоммуникационной сети', fg='blue', font=fnt)
label.pack()
label1 = Tkinter.Label(root, text=u'X=', fg='red', font=fnt)
label1.pack()
ent_x = Tkinter.Entry(root, width=20, bd=3)
ent_x.pack()  #Забыли упаковать этот виджет
#
label2 = Tkinter.Label (root, text=u'Y=', fg='red', font=fnt)
label2.pack()
ent_y = Tkinter.Entry(root, width=20, bd=3)
ent_y.pack()
#
label3 = Tkinter.Label(root, text=u'Z=', fg='red', font=fnt)
label3.pack() #И этот...
ent_z = Tkinter.Entry(root, width=20, bd=3)
ent_z.pack()  #Вот этот тоже выводиться не будет :)
#
button = Tkinter.Button(root, text=u'Посчитать', width=10, height=1, bg="white", fg="blue", command=quit)
button.pack(expand=True, fill="x")
#
root.mainloop()

P.S. Забыл сказать. Еще.

 root.quit

Это не закрытие окна. Это вывод окна из цикла обработки событий. Вывести он его вывел. А вот закрывать не планирует, так как Вы ему не дали по этому окну четких указаний
Поэтому лушче делать так, как я написал выше.

Будут вопросы - пишите.

Отредактировано 4kpt_II (Ноя. 16, 2013 17:22:50)

Офлайн

#5 Ноя. 16, 2013 17:31:28

fedor
Зарегистрирован: 2013-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание окна ввода чисел

Спасибо большое за ответ, все доходчиво. По подключению библиотеки tkinter как было ранее внял из прочитанного по ссылке.
Можно уточнить ещё несколько вопросов?
что нам дает импорт tkFont и def quit?

import tkFont
#
def quit():
    root.destroy()
И получается каждое действие необходимо паковать?

Офлайн

#6 Ноя. 16, 2013 17:46:32

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

создание окна ввода чисел

1. Импорт tkFont дает вам возможность в пространстве выполнения создавать шрифты и самостоятельно их настраивать. И потом использовать их короткие записи для назначения этих шрифтов нужным виджетам.
Мне кажеться, что

font=fnt

менее засирает код, чем

font = ('Georgia', 8, 'italic')

Мало того, если в коде изменится параметры шрифта fnt, то это автоматом влияет на все виджеты, к которым он привязан. Хороший такой бонус

2. Действия паковать не надо. Но на них нужно писать обработчик. Иначе реакции Вы не получите. Я создал реакцию виджета button на стандартные вызовы. При появлении нужного события на нужном виджете (событие Button-1 или space) вызывается функция quit в которой убивается корневое окно. Хотя в этой функции могло бы быть все, что угодно: рассчеты, изменения параметров существующих виджетов, создание новых, открытие и закрытие файлов и …..

3. Необходимо вызывать менеджер геометрии объектов для каждого виджета, т.е. как Вы выражаетесь, “паковать”.
Их существует 3: pack(), place(), grid().

Будут вопросы - пишите.

Отредактировано 4kpt_II (Ноя. 16, 2013 17:47:32)

Офлайн

#7 Ноя. 16, 2013 17:59:21

fedor
Зарегистрирован: 2013-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание окна ввода чисел

1.С бонусом согласен
2.Усвоил, я так и собираюсь потом написать действие кнопки к вычислению функции и выводу графика
3.grid() если не ошибаюсь дает возможность выстраивать объекты в пространстве?

ent_x.grid(row=0,column=0)

Отредактировано fedor (Ноя. 16, 2013 18:00:05)

Офлайн

#8 Ноя. 16, 2013 18:07:53

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

создание окна ввода чисел

Все менеджеры геометрии объектов служат для размещения виджетов в пространстве. Подходы только разные. Единственное, что нужно помнить: два разных менеджера на одном виджете работать не будут. Чтобы это реализовать нужно для каждого менеджера создавать свою рамку (Tkinter.Frame). И рамки с размещенными объектами уже размещать на базовом виджете.

Будут вопросы - пишите.

Отредактировано 4kpt_II (Ноя. 16, 2013 18:08:53)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version