2

since the forum has been quiet for a while I thought to post this program , it might start new discussions . the idea is not new but it should be interesting to starters . as usual any comments is appreciated

Edited by Gribouillis: Updated code to handle None case

# this program converts the Farenheit to Celsius and vice versa
# it is tested on python 3.4
# modifications are needed to get it working on python 2.xx


from tkinter import *
from tkinter.simpledialog import askfloat , askinteger
from tkinter import messagebox
import sys

root = Tk()
root.title('temperature converter')
text = Text(root , width = 80 , height = 30)
text.config(bg = 'blue', fg = 'yellow' , font=('Arial', 12, 'bold', 'italic'))
text.pack()


def to_write( s):

    '''
       this function will print to text widget
    '''
    
    text.insert(END,s)


def cel_to_far():
    '''
        this function asks for a number in Celsius
        and converts it to Farenheit
     '''   
    clus = askfloat('Celsius','Please enter the temperature in Celsius :')
    far = (clus*(9/5.0)) + 32
    print('\n{} Celsius is equal to {:.1f} Farenheit '.format(clus,far) )
    

def far_to_cel():

    '''
        this function asks for a number in Farenheit
        and converts it to Celsius
     '''
    
    far = askfloat('Farenheit','Please enter the temperature in Farenheit : ')
    clus = (far - 32) * (5/9.0)
  
    print('\n{} Farenheit is equal to {:.1f} Celsius '.format(far,clus) )

def to_exit():
    '''
        this function stops the program
     '''   
    
    quit()

    
sys.stdout.write = to_write


while True:    
    result=askinteger('options',(' Farenheit to Celsius press 1',
                                        '\n Celsius to Farenheit press 2',
                                        '\n Exit  press 3 '))
   
    if result == 1:
        far_to_cel()
    elif result == 2:
        cel_to_far()
    elif result == 3:
        to_exit()
    elif result is None:
        to_exit()
    else:
        messagebox.showerror('wrong input','the choice should be either 1 , or 2 or 3 ')

root.mainloop()
4
Contributors
7
Replies
58
Views
2 Years
Discussion Span
Last Post by fonzali
1

Great stuff thanks. I'm running 2.7

I had to change quit() on line 54 to:

    root.destroy()
    sys.exit()

Otherwise my run of it would hang on cancel.

Also in 2.7, I had to change some of the imports, and line 72, because several Tkinter modules have been change in 3.+ from 2.7 as follows:

2.7 → 3.+
Tkinter → tkinter
tkMessageBox → tkinter.messagebox
tkColorChooser → tkinter.colorchooser
tkFileDialog → tkinter.filedialog
tkCommonDialog → tkinter.commondialog
tkSimpleDialog → tkinter.simpledialog
tkFont → tkinter.font
Tkdnd → tkinter.dnd
ScrolledText → tkinter.scrolledtext
Tix → tkinter.tix
ttk → tkinter.ttk
Ref: https://stackoverflow.com/questions/673174/file-dialogs-of-tkinter-in-python-3 

So if the reader is not running 3.+, make the appropriate changes from the above list, and all should be good to go.

Votes + Comments
helpful
0

Also, to get the "Cancel" button in the dialog to work insert between lines 70 and 71 this:

elif result == None:
    to_exit()
1

insert between lines 70 and 71 this

I updated the code accordingly. Note that a None value must be checked with the is operator.

Edited by Gribouillis

1

thanks to @BustAcode and @Gribouillis I updated my code to work with both versions of python , also the text widget is expandable now , I tried to attach the scrollbar to text widget but no luck . here is my updated code

# this program converts the Farenheit to Celsius and vice versa
# it is tested on python 3.4 and python 2.7


try:
    # for Python2

    from Tkinter import *
    import tkMessageBox
    from tkSimpleDialog import askfloat , askinteger
except ImportError:
    # for Python3

    from tkinter import *
    from tkinter.simpledialog import askfloat , askinteger
    from tkinter import messagebox



import sys

root = Tk()
root.title('temperature converter')

text = Text(root , width = 80 , height = 30 )   
text.config(bg = 'blue', fg = 'yellow' , font=('Arial', 12, 'bold', 'italic'))
text.pack( fill = BOTH , expand = 1)


def to_write( s):

    '''
       this function will print to text widget
    '''

    text.insert(END,s)


def cel_to_far():
    '''
        this function asks for a number in Celsius
        and converts it to Farenheit
     '''   
    clus = askfloat('Celsius','Please enter the temperature in Celsius :')
    far = (clus*(9/5.0)) + 32
    print('\n{} Celsius is equal to {:.1f} Farenheit '.format(clus,far) )


def far_to_cel():

    '''
        this function asks for a number in Farenheit
        and converts it to Celsius
     '''

    far = askfloat('Farenheit','Please enter the temperature in Farenheit : ')
    clus = (far - 32) * (5/9.0)

    print('\n{} Farenheit is equal to {:.1f} Celsius '.format(far,clus) )

def to_exit():
    '''
        this function stops the program
     '''   
    root.destroy()
    sys.exit()


sys.stdout.write = to_write


while True:    
    result=askinteger('options',(' Farenheit to Celsius press 1',
                                        '\n Celsius to Farenheit press 2',
                                        '\n Exit  press 3 '))

    if result == 1:
        far_to_cel()
    elif result == 2:
        cel_to_far()
    elif result == 3:
        to_exit()
    elif result is None:
        to_exit()
    else:
        messagebox.showerror('wrong input','the choice should be either 1 , or 2 or 3 ')


root.mainloop()
0

this is what @ddanbe asked for , I hope it is not a homework assignment !!!! this can be improve but I did not have time to do it

# this program converts the Farenheit to Celsius and vice versa
# it also converts a series of temperatures from Celsius to Farenheit and vice versa
# it asks for the start and ending temperatures
# if we type 0(zero) as the start temperature , only the final temperature is converted
# thus the minimum starting temperature is 1 (one)
# it is tested on python 3.4 and python 2.7


try:
    # for Python2

    from Tkinter import *
    import tkMessageBox
    from tkSimpleDialog import askfloat , askinteger
except ImportError:

    # for Python3

    from tkinter import *
    from tkinter.simpledialog import askfloat , askinteger
    from tkinter import messagebox



import sys

root = Tk()
root.title('temperature converter')

text = Text(root , width = 80 , height = 30 )   
text.config(bg = 'blue', fg = 'yellow' , font=('Arial', 12, 'bold', 'italic'))
text.pack( fill = BOTH , expand = 1)




def to_write( s):

    '''
       this function will print to text widget
    '''

    text.insert(END,s)


def cel_to_far():
    '''
        this function converts a range of temperatures
        from Celsius to Farenheit with increments of
        5 degree and prints them on the text widget


     '''   
    for i in range (start,end + 1 , 5 ):

        farenheit = (i * 9/5.0) + 32
        print('{} celsius is equal to {:.1f} farenheit ' . format(i,farenheit))



def far_to_cel():

    '''
        this function converts a range of temperatures
        from Farenheit to Celsius with increments of
        5 degree and prints them on the text widget
    '''
    for i in range(start,end + 1 , 5 ):
        clus = (i - 32) * (5/9.0)

        print('{} Farenheit is equal to {:.1f} Celsius '.format(i , clus) )

def to_exit():
    '''
        this function stops the program
     '''   
    root.destroy()
    sys.exit()


sys.stdout.write = to_write


while True:    
    result=askinteger('options',('1:  Farenheit to Celsius ',

                                 '\n 2:  Celsius to Farenheit ',

                                 '\n 3:  Exit  '))

    if result == 1:

       start=askinteger('start temperature',('please enter the starting temperature > 0' ,
                                             '\ntype 0 (zero) if you do not want a range \n'))
       end=askinteger('end temperature','please enter the ending temperature')

       if start == 0:
           clus = (end - 32) * (5/9.0)
           print('\n{} Farenheit is equal to {:.1f} Celsius '.format(end , clus) )
       elif start and end:    
          far_to_cel()
       elif not start and not end:
            to_exit()

    elif result == 2:

        start=askinteger('start temperature',('please enter the starting temperature > 0',
                                               '\ntype 0 (zero) if you do not want a range\n'))                              
        end=askinteger('end temperature','please enter the ending temperature')

        if start == 0:
            farenheit = (end * 9/5.0) + 32
            print('{0} celsius is equal to {1} farenheit ' . format(end,farenheit))
        elif start and end:
            cel_to_far()
        elif not start and not end:
            to_exit()

    elif result == 3:
        to_exit()
    elif result is None:
        to_exit()
    else:
        messagebox.showerror('wrong input','the choice should be either 1 , or 2 or 3 ')


root.mainloop()
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.