简体   繁体   English

Python GUI程序,两次转换

[英]Python GUI Program, two conversions

I was working on designing a program with 2 windows for conversion. 我正在设计一个带有2个窗口的程序进行转换。 One for kilometers to miles, and the other miles to kilometers. 一个公里到几英里,另一英里到几公里。 The GUI message box has two places to type, but only the kilomiles box gives me results. GUI消息框有两个地方可以输入,但是只有千里框能给我结果。 I've tried different things, but i haven't been able to figure out how to get it so the convert button works for no matter which box I enter in. 我尝试了不同的方法,但是我无法弄清楚如何获得它,因此无论我输入哪个框,转换按钮都可以使用。

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()

Thank You! 谢谢!

Your code after def do_something(self) is a bit clumsy. def do_something(self)之后的代码有点笨拙。 In particular, you shouldn't call mainloop() more than once. 特别是,您不应mainloop()调用mainloop()

One way to implement your convert() method would be to just check if the Input boxes are empty, and convert their content if they are not, as below: 实现convert()方法的一种方法是只检查Input框是否为空,如果不是,则转换其内容,如下所示:

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.')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM