2016-08-04 3 views
-2

Я сделал простой калькулятор с кнопками вроде 1, 2, 3 и т. Д., Но я не могу поместить этот текст кнопки, например, 1 или 2 и т. Д. На экран калькулятора , Было бы очень полезно, если вы, ребята, дайте мне несколько советов ..Как показать текст кнопок в экране калькулятора

from tkinter import * 
root = Tk() 
buttons = '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-' 

def calc(value): 
    res = num.get() 
    res = res + " " + value 
    res = str(eval(res)) 
    num.set(res) 


num = StringVar() 
rows = 1 
col = 0 

ent = Entry(root, textvariable = num, background = "#D0F3F5", border = 2, width = 50) 
ent.bind('<FocusOut>') 
ent.grid(row = 0 , column = 0, columnspan = 4, ipadx = 5, ipady = 5) 

Button(root, text = '=', width = 45, command = calc).grid(column = 0, row = 5, columnspan = 4) 

for button in buttons: 
    button = Button(root,width = 10, text = button, command = lambda: calc(button)) 
    #button.bind('<Button-1>', lambda e: screen(button)) 
    button.grid(row = rows, column = col, sticky = "W E") 
    button['relief']="groove" 
    col = col + 1 

    if col == 4: 
     rows = rows + 1 
     col = 0 

    if rows > 6: 
     break 




root.mainloop() 
+0

Имея проблемы с пониманием цели некоторых бит. 'command = calc', как это можно использовать? 'для кнопки в кнопках: button = Button (..)' используя одно и то же имя здесь. 'res +" "+ value'' str (eval (res)) ', что вы пытаетесь оценить? –

ответ

0

Есть несколько проблем здесь.

1) Переменная button используется для двух разных целей, что делает один из них переопределяющим другой. Вам нужно переименовать один из них.

2) Когда using lambdas with parameters in for loops, чтобы получить текущее значение этого параметра, вам необходимо явно записать значение.

3) Вы не передаете какой-либо параметр команде знака равенства.

4) Для проведения расчетов необходимо проверить, нажата ли кнопка =. Если нет, вы не должны пытаться ничего рассчитать.

Применяя все эти к результатам коды в:

def calc(value): 
    res = num.get() 
    res = res + value 

    if value == "=": 
     res = str(eval(res[:-1])) #to exclude equal sign itself 

    num.set(res) 

#equal sign button 
Button(root, text = '=', width = 45, command = lambda: calc("=")).grid(...) 

#for loop and renaming a variable 
for x in buttons: 
    button = Button(root,width = 10, text = x, command = lambda x=x: calc(x)) 
+0

Спасибо, Сэр @ Lafexlos .. это работает сейчас. Ты действительно помог мне сэр ... и теперь я понял цель лямбды с вашим объяснением. – Ahmad

+0

@ Амад, если этот ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – Lafexlos

+1

Я не знал иначе, я бы сделал это раньше. Спасибо снова .. :) – Ahmad

Смежные вопросы