Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 25, 2018 00:46:08

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

 from tkinter import *
def calculator():
	if var_enter_b in ('+','-','*','/'):
		global var_calc
		var_calc=0
		if var_enter_b=='+':
			var_calc=var_enter_a+var_enter_c
			result=Label(win_calc,text=var_calc).place(x=200,y=20)
		elif var_enter_b=='-':
			var_calc=var_enter_a-var_enter_c
			result=Label(win_calc,text=var_calc).place(x=200,y=20)
		elif var_enter_b=='*':
			var_calc=var_enter_a*var_enter_c
			result=Label(win_calc,text=var_calc).place(x=200,y=20)
		elif var_enter_b=='/':
			var_calc=var_enter_a/var_enter_c
			result=Label(win_calc,text=var_calc).place(x=200,y=20)
	else:
		result=Label(win_calc,text='non').place(x=200,y=20)
def calc():
	global win_calc
	win_calc=Tk()
	win_calc.title('calc')
	win_calc.geometry('400x300')
	text_calc=Label(win_calc,text='Calculator').place(x=0,y=0)
	global var_enter_a
	var_enter_a=Entry(win_calc,width='5').place(x=0,y=20)
	global var_enter_b
	var_enter_b=Entry(win_calc,width='5').place(x=50,y=20)
	global var_enter_c
	var_enter_c=Entry(win_calc,width='5').place(x=100,y=20)
	bth_enter_calc=Button(win_calc,text='=',width='5',command=calculator).place(x=150,y=18)
	root.mainloop()
root=Tk() # Создание окна
root.title('XakConsole') # Название окна
root.geometry('400x300') # Размер окна
root.resizable(width=False,height=False) # выключена возможность изменять размер окна
text_display2=Label(text='Console 1.3 created by Xakep321').place(x=0,y=0)
btn_calc=Button(text='КАЛЬКУЛЯТОР',command=calc).place(x=155,y=20)
btn_exit=Button(text='ВЫХОД',command=exit).place(x=174,y=50)
root.mainloop()
Я уже не понимаю почему калькулятор не работает, я и так, и сяк, а все наперекосяк.
Не судите строго, я учу tkinter только 3 часа, и из крупиц знаний смог скласть это. Но калькулятор, как не крути, выдает значение non, возможно моя ошибка очевидна, но не для меня.
Прошу прощения за этот говно-код, я знаю что вы все обьеденяете в фреймы(frame,рамки), но я все же не понимаю их смысла, если можно и без них писать код (кто может обьяснить - обьясните пожалуйста), и пишете код аккуратнее. Тут можно заметить что в случае сумы должна добавится метка и при повторном использовании калькулятора метка будет налаживаться поверх другой (я не знаю как от этого избавиться).
НО ГЛАВНАЯ ошибка: в условии
 if b in ('+','-','*','/'):
    if ...
else:
    result=Label(win_calc,text=var_calc).place(x=200,y=20)
хоть я и ввожу + оно выводит метку non.
Пишу это в час ночи по киевскому времени, поэтому может быть много ошибок

Отредактировано Xakep321 (Фев. 25, 2018 00:49:29)

Прикреплённый файлы:
attachment screen.py (1,6 KБ)

Офлайн

#2 Фев. 25, 2018 00:57:11

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Понять почему оно не работает не в моих силах, вряд-ли причина в том что переменная var_enter_b является строкой. И да, я понимаю что переменные var_enter_a и var_enter_c являются строками, но какой смысл менять их тип если они должны и без того соединятся просто как символы #1+2=12 или a+b=ab
Кто знает tkinter, прошу помочь мне

Отредактировано Xakep321 (Фев. 25, 2018 01:07:31)

Офлайн

#3 Фев. 25, 2018 01:07:45

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Офлайн

#4 Фев. 25, 2018 01:37:16

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Офлайн

#5 Фев. 25, 2018 01:38:03

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

НО ВСЕ ЖЕ, кто нибудь обьяснит В ЧЕМ ОШИБКА?

Офлайн

#6 Фев. 25, 2018 08:29:48

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Xakep321
В ЧЕМ ОШИБКА?
а где ты извлекаешь значения из полей чтобы с ними что то делать?

Офлайн

#7 Фев. 25, 2018 13:24:19

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

marvellik
Я думал что значения сразу присваиваются переменным var_enter_a и тд. Хорошо сейчас попробую именовать им переменные

Офлайн

#8 Фев. 25, 2018 14:04:05

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Xakep321
ваш код с исправлением
 from tkinter import *
def calculator(a,b,c,wroot):
    var_enter_a = float(a.get())
    var_enter_b = b.get()
    var_enter_c = float(c.get())
   
    if var_enter_b in ('+-*/'):
        if var_enter_b == '+':
            var_calc = var_enter_a + var_enter_c
        elif var_enter_b == '-':
            var_calc = var_enter_a - var_enter_c  
        elif var_enter_b == '*':
            var_calc = var_enter_a * var_enter_c
        elif var_enter_b == '/':
            var_calc = var_enter_a / var_enter_c
	
    else:
        var_calc = 'non'
    result = Label(wroot, text = var_calc).place(x=200,y=20)
        
def calc():
	
    win_calc = Tk()
    win_calc.title('calc')
    win_calc.geometry('400x300')
    text_calc = Label(win_calc,text='Calculator').place(x = 0,y = 0)
    var_enter_a = Entry(win_calc,width = '5')
    var_enter_a.place(x = 0,y = 20)
    var_enter_b=Entry(win_calc,width = '5')
    var_enter_b.place(x = 50,y = 20)
    var_enter_c = Entry(win_calc,width = '5')
    var_enter_c.place(x = 100,y = 20)
    bth_enter_calc = Button(win_calc, text = '=',width = '5',
                             command = lambda  : calculator(var_enter_a,var_enter_b,var_enter_c,
                             win_calc)).place(x = 150,y = 18) 
    root.mainloop()
	
root=Tk() # Создание окна
root.title('XakConsole') # Название окна
root.geometry('400x300') # Размер окна
root.resizable(width=False,height=False) # выключена возможность изменять размер окна
text_display2=Label(text='Console 1.3 created by Xakep321').place(x=0,y=0)
btn_calc=Button(text='КАЛЬКУЛЯТОР',command=calc).place(x=155,y=20)
btn_exit=Button(text='ВЫХОД',command=exit).place(x=174,y=50)
root.mainloop()
но еще требуется обрабатывать ошибки ввода если поле пустое или введено не число

Отредактировано marvellik (Фев. 25, 2018 14:06:51)

Офлайн

#9 Фев. 25, 2018 15:07:44

Xakep321
От: Украина, Харьков
Зарегистрирован: 2018-02-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

marvellik
Спасибо!)) думаю с обработкой неверного ввода разберусь)

Офлайн

#10 Фев. 25, 2018 15:37:39

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

НЕ будьте равнодушны) помогите с TKinter, сам уже НЕ могу разобраться

Xakep321
количество неправильных вариантов намного больше количества правильных, поэтому разбирать все неправильные нет ни желания, ни потребности.
учитесь делать правильно, примеров в инете тьма
https://github.com/baoboa/pyqt5/blob/master/examples/widgets/calculator.py

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version