Найти - Пользователи
Полная версия: Помогите заставить работать GUI (Tkinter, Python 3.4)
Начало » Python для новичков » Помогите заставить работать GUI (Tkinter, Python 3.4)
1
george32451
Привет всем! Я новичок в пайтоне, но не совсем новичок в программировании . В общем ситуация такая, набросал я GUI на Tkinter'е и не могу его заставить выполнять свои функции. Так же отдельно сделал консольную программку, которую как-нибудь хотелось бы прикрутить к GUI. В общем смотрите:
x = float(input("Введите длину дома: "))
y = float(input("Введите ширину дома: "))
z = float(input("Введите высоту дома: "))
square = ((x*z) + (y*z))*2
print("Площадь дома равна:", square)
vid = input("Какой вид кирпича? Введите одинарный, полуторный, двойной ")
kladka = input("Какая толщина кладки? Введите 0,5 1 1,5 2 2,5 ")
if vid == "одинарный" and kladka == '0,5':
    print("Число кирпича", square * 61)
if vid == "одинарный" and kladka == '1':
    print("Число кирпича", square * 128)
if vid == "одинарный" and kladka == '1,5':
    print("Число кирпича", square * 189)
if vid == "одинарный" and kladka == '2':
    print("Число кирпича", square * 256)
    
if vid == "одинарный" and kladka == '2,5':
    print("Число кирпича", square * 317)
#======================================================
if vid == "полуторный" and kladka == '0,5':
    print("Число кирпича", square * 45)
if vid == "полуторный" and kladka == '1':
    print("Число кирпича", square * 95)
if vid == "полуторный" and kladka == '1,5':
    print("Число кирпича", square * 140)
if vid == "полуторный" and kladka == '2':
    print("Число кирпича", square * 190)
    
if vid == "полуторный" and kladka == '2,5':
    print("Число кирпича", square * 235)    
#======================================================
if vid == "двойной" and kladka == '0,5':
    print("Число кирпича", square * 30)
if vid == "двойной" and kladka == '1':
    print("Число кирпича", square * 60)
if vid == "двойной" and kladka == '1,5':
    print("Число кирпича", square * 90)
if vid == "двойной" and kladka == '2':
    print("Число кирпича", square * 120)
    
if vid == "двойной" and kladka == '2,5':
    print("Число кирпича", square * 150)
Это, как вы уже поняли, консольная версия. А вот и сам GUI:
from tkinter import *
root = Tk()
root.title("Brick Calc")
root.minsize(width=270,height=480)
root.resizable(False,False)
vvod = Entry(root,width=20,bd=2)
vvod1 = Entry(root,width=20,bd=2)
vvod2 = Entry(root,width=20,bd=2)
lab = Label(root,text="Размеры дома:", font = "Arial 10", fg="#CF0000")
chislo = Label(root, text = "Длина(м)", font = "Arial 10")
chislo1 = Label(root, text ="Ширина(м)", font = "Arial 10")
chislo2 = Label(root, text = "Высота(м)", font = "Arial 10")
lab1=Label(root,text = "Вид кладки:", font = "Arial 10", fg="#CF0000")
sort_kir = Label(root, text = "Вид кирпича", font = "Arial 10")
sort_klad = Label(root, text = "Толщина кладки", font = "Arial 10")
var = IntVar()
var.set(0)
rad0 = Radiobutton(root,text="Одинарный(250x120x65мм)",
                   variable=var,value=0)
rad1 = Radiobutton(root,text="Полуторный(250x120x88мм)",
                   variable=var,value=1)
rad2 = Radiobutton(root,text="Двойной(250x120x138мм)",
                   variable=var,value=2)
var1 = IntVar()
var1.set(0)
rd0 = Radiobutton(root,text="0,5",
                   variable=var1,value=0)
rd1 = Radiobutton(root,text="1",
                   variable=var1,value=1)
rd2 = Radiobutton(root,text="1,5",
                   variable=var1,value=2)
rd3 = Radiobutton(root,text="2",
                   variable=var1,value=3)
rd4 = Radiobutton(root,text="2,5",
                   variable=var1,value=4)
but=Button(root,text="Рассчитать!",width=15)
tex = Text(root,width=25,height=6,font="12",wrap=WORD)
lab.grid(row=0,column=0)
chislo.grid(row=1,column=0,pady=5)
vvod.grid(row=1,column=1,padx=20,pady=5)
chislo1.grid(row=2,column=0,pady=5)
vvod1.grid(row=2,column=1,padx=20,pady=5)
chislo2.grid(row=3,column=0,pady=5)
vvod2.grid(row=3,column=1,padx=20,pady=5)
lab1.grid(row=4,column=0,pady=0)
sort_kir.place(x=0,y=155)
rad0.place(x=90,y=135)
rad1.place(x=90,y=155)
rad2.place(x=90,y=175)
sort_klad.place(x=0,y=240)
rd0.place(x=120,y=220)
rd1.place(x=120,y=240)
rd2.place(x=120,y=260)
rd3.place(x=160,y=240)
rd4.place(x=160,y=220)
but.place(x=81,y=315)
tex.place(x=22,y=350)
mainloop()
Помогите, пожалуйста, заставить работать программку . Ну или хотя бы ткните носом в соответствующую литературу(можно и на английском).
4kpt_II
Мамочка моя
Что в GUI не работает?
george32451
4kpt_II Дело в том, что все работает, окошечки там, переключатели… Но эта вся красота не выполняет свою функцию - не подсчитывает кирпича Да, я зная, что не написал не единой строчки кода для этого, просто нужно узнать, каким образом написать эти строки? Указав в def функции какой-то код? Или что? Спасибо за внимание
4kpt_II
Нужно вешать обработчик на определенное событие.
Для этого создается функция-обработчик (обычная функция)
После этого с функцией связывается событие. Тут два способа:
1. Метод bind(“<тип события>”, функция-обработчик)
2. Свойство button = функция_обработчик.

Для новичка предпочтительнее второй вариант.
george32451
4kpt_II Спасибо большое! Скажите, есть ли какая-нибудь литература/сайты по этому вопросу? Гуглил, нашел только офф. мануал на сайте пайтона и сайт на русском, не помню как называется
4kpt_II
Для начала хватит любого сайта на русском. Потом уже пользуясь документацией можно просто смотреть свойства и методы отдельных виджетов. Есть книга на английском. Полностью по Tkinter.
george32451
4kpt_II Спасибо большое за помощь, не скажите, как книжечка называется?
4kpt_II
Python and Tkinter Programming. Книга 2000 года.
george32451
4kpt_II Спасибо вам большое! Все сделал, все работает! И последний вопрос в этой теме: как сделать так, чтобы при запуске программы с графическим интерфейсом не открывалась консоль?
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