Найти - Пользователи
Полная версия: создание окна ввода чисел
Начало » GUI » создание окна ввода чисел
1
fedor
Здравствуйте.
Пытаюсь написать програмку считающую формулу по вводимым параметрам чисел. Столкнулся с проблемой что не выводятся окна ввода параметров. А именно для этого решил использовать однострочное текстовое поле. Но по какой-то причине оно не выводится и вообще подойдет оно для ввода чисел?. Подскажите что не так делаю. Заранее спасибо
(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()
4kpt_II
По Вашему посту:
- Вы считаете, что размещать его не надо?

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

 # -*- coding: cp866 -*-

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

# coding: utf-8

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

from Tkinter import *

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

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

label.config()

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

Будут вопросы, пишите.
fedor
# 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()

Да канечно же ссылки буду не лишними, обязательно прочту
4kpt_II
Ссылка на тему Смотрите с середины
Далее. По Вашему вопросу. Я же уже ответил.

# 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

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

Будут вопросы - пишите.
fedor
Спасибо большое за ответ, все доходчиво. По подключению библиотеки tkinter как было ранее внял из прочитанного по ссылке.
Можно уточнить ещё несколько вопросов?
что нам дает импорт tkFont и def quit?
import tkFont
#
def quit():
    root.destroy()
И получается каждое действие необходимо паковать?
4kpt_II
1. Импорт tkFont дает вам возможность в пространстве выполнения создавать шрифты и самостоятельно их настраивать. И потом использовать их короткие записи для назначения этих шрифтов нужным виджетам.
Мне кажеться, что

font=fnt

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

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

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

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

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

Будут вопросы - пишите.
fedor
1.С бонусом согласен
2.Усвоил, я так и собираюсь потом написать действие кнопки к вычислению функции и выводу графика
3.grid() если не ошибаюсь дает возможность выстраивать объекты в пространстве?
ent_x.grid(row=0,column=0)
4kpt_II
Все менеджеры геометрии объектов служат для размещения виджетов в пространстве. Подходы только разные. Единственное, что нужно помнить: два разных менеджера на одном виджете работать не будут. Чтобы это реализовать нужно для каждого менеджера создавать свою рамку (Tkinter.Frame). И рамки с размещенными объектами уже размещать на базовом виджете.

Будут вопросы - пишите.
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