2017-05-17 6 views
0

変換のための2つのウィンドウを持つプログラムの設計に取り組んでいました。 1つはキロメートルからマイル、もう1つはキロメートルです。 GUIのメッセージボックスには2つの場所がありますが、kilomilesボックスのみが結果を表示します。私は別のものを試してみたが、私は、変換ボタンを私が入力したボックスに関係なくのために働くようにそれを取得する方法を見つけ出すことができていない。Python GUIプログラム、2回の変換

import tkinter 
import tkinter.messagebox 


class MyGUI: 
    def __init__(self): 

    # Create the main window widget. 
    self.main_window = tkinter.Tk() 

    # Create two frames 
    self.top_frame = tkinter.Frame(self.main_window) 
    self.bottom_frame = tkinter.Frame(self.main_window) 

    # Create three Label widgets for the 
    # top frame. 
    self.label1 = tkinter.Label(self.top_frame, \ 
           text='Lets Have Fun') 
    self.label2 = tkinter.Label(self.top_frame, \ 
           text='Calculate Distance') 
    self.prompt_label = tkinter.Label(self.top_frame, \ 
       text='Enter how many kilometers you drove today:') 
    self.kilo_entry = tkinter.Entry(self.top_frame, \ 
            width=10) 
    self.prompt_label2 = tkinter.Label(self.top_frame, \ 
       text='Enter how many miles you drove today:') 
    self.miles_entry = tkinter.Entry(self.top_frame, \ 
            width=10) 
    # Pack the labels that are in the top frame. 
    # Use the side='top', 'left' and 'bottom' arguments to stack them 
    # one on top of the other. 

    self.label1.pack(side='top') 
    self.label2.pack(side='top') 
    self.prompt_label.pack(side='left') 
    self.kilo_entry.pack(side='left') 
    self.prompt_label2.pack(side='left') 
    self.miles_entry.pack(side='left') 


    self.top_frame.pack() 
    self.bottom_frame.pack() 


    self.my_button = tkinter.Button(self.main_window, \ 
            text='What if I dont know?', \ 
            command=self.do_something) 
    self.calc_button = tkinter.Button(self.top_frame, \ 
            text='Convert', \ 
            command=self.convert) 
    self.quit_button = tkinter.Button(self.main_window, \ 
             text='Quit', \ 
             command=self.main_window.destroy) 

    self.my_button.pack() 
    self.quit_button.pack() 
    self.calc_button.pack() 

    tkinter.mainloop() 

def do_something(self): 
    tkinter.messagebox.showinfo('Response', \ 
           'Just enter your favorite number.') 

miles = 0.00 
miles == " " 




def convert(self): 
    # Get the value entered by the user into the 
    # kilo_entry widget. 
    kilo = float(self.kilo_entry.get()) 

    # Convert kilometers to miles. 
    miles = kilo * 0.6214 

    # Display the results in an info dialog box. 
    tkinter.messagebox.showinfo('Results', \ 
     str(kilo) + ' kilometers is equal to ' + \ 
     str(miles) + ' miles.') 
    def convert2(self): 
    if self.kilo_entry == " ": 
     convert2(self) 
    else: 
     convert(self) 


    tkinter.mainloop() 


    # Get the value entered by the user into the 
    # kilo_entry widget. 
    miles = float(self.miles_entry.get()) 

    # Convert kilometers to miles. 
    kilo = (miles)/(0.6214) 

    # Display the results in an info dialog box. 
    tkinter.messagebox.showinfo('Results', \ 
     str(miles) + ' miles is equal to ' + \ 
     str(kilo) + ' kilo.') 

my_gui = MyGUI() 

をありがとうございました!

+2

インデントを修正してください:あなたのconvert()メソッドを実装する

一つの方法は、以下のように、入力ボックスが空であり、そうでない場合は、その内容を変換する場合だけをチェックすることです。 –

答えて

0

def do_something(self)のコードは少し不器用です。特に、mainloop()に複数回電話をかけてはいけません。

class MyGUI: 
    def __init__(self): 
     # Create the main window 
     self.main_window = tkinter.Tk() 

     # Define all widgets 
     ... 

     # Launch the app 
     self.main_window.mainloop() 

    def do_something(self): 
     tkinter.messagebox.showinfo('Response', \ 
            'Just enter your favorite number.')  

    def convert(self): 
     # Convert each box if not empty 
     if self.kilo_entry.get() != "": 
      self.convert_kilo2miles() 
     if self.miles_entry.get() != "": 
      self.convert_miles2kilo() 

    def convert_kilo2miles(self): 
     # Get the value entered by the user into the kilo_entry widget. 
     kilo = float(self.kilo_entry.get()) 

     # Convert kilometers to miles. 
     miles = kilo * 0.6214 

     # Display the results in an info dialog box. 
     tkinter.messagebox.showinfo('Results', \ 
      str(kilo) + ' kilometers is equal to ' + \ 
      "{:.3f}".format(miles) + ' miles.') 

    def convert_miles2kilo(self): 
     # Get the value entered by the user into the miles_entry widget. 
     miles = float(self.miles_entry.get()) 

     # Convert miles to km. 
     kilo = (miles)/(0.6214) 

     # Display the results in an info dialog box. 
     tkinter.messagebox.showinfo('Results', \ 
      str(miles) + ' miles is equal to ' + \ 
      "{:.3f}".format(kilo) + ' kilometers.') 
関連する問題