GUI按钮调用函数的问题,这些函数提示用户在GUI中进行输入,然后显示输出

时间:2019-04-27 22:24:04

标签: python python-3.x tkinter

我无法在GUI中获得用户输入


from tkinter import *
from tkinter import ttk
import math


1 个答案:

答案 0 :(得分:1)

我使用按钮const HeaderButton = (props) => ( <TouchableRipple onPress={props.navigation.openDrawer} > Rectangle创建主框架,然后使用Triangle进行显示。

我还使用pack()创建了两个框架,但是我没有使用Entry来显示它。

当我单击pack()Rectangle时,它将运行使用Triangle从窗口中删除主框架的功能,并且它使用pack_forget()两次显示带有{ {1}}。

此框架具有按钮.pack(),该按钮使用您的函数来计算结果-但是它从Entry获取值,并在Label中显示结果。

它还有一个按钮Entry,该按钮将删除该框架并再次显示主框架。

我使用Calc来记住当前可见的帧。

Back

您可以使用current

from tkinter import *
from tkinter import ttk
import math

# ---

def change_frame(new_frame):
    global current
    # hide current frame
    current.pack_forget()

    # show new frame
    current = new_frame
    current.pack()

def show_main_frame():
    change_frame(main_frame)

def show_rectangle_frame():
    change_frame(rectangle_frame)

def show_triangle_frame():
    change_frame(triangle_frame)

# ---

def calc_rectangle():
    try:
        l = float(rectangle_entry1.get())
        w = float(rectangle_entry2.get())
        arear=(l * w)
        print(arear)
        rectangle_result['text'] = str(arear)
    except ValueError:
        pass

def calc_triangle():
    try:
        b = float(triangle_entry1.get())
        h = float(triangle_entry2.get())
        areat=(0.5* b * h )
        print(areat)
        triangle_result['text'] = str(areat)
    except ValueError:
        pass

#-----

window = Tk()
window.title("Area Calculator")
#window.geometry("290x120")

main_frame = Frame(window)
main_frame.pack()

button = Button(main_frame, text="Rectangle", command=show_rectangle_frame)
button.pack()

button = Button(main_frame, text="Triangle", command=show_triangle_frame)
button.pack()

current = main_frame

# --- frame without .pack() ---

rectangle_frame = Frame(window)

rectangle_result = Label(rectangle_frame, text="")
rectangle_result.pack()

l = Label(rectangle_frame, text="Enter Length:")
l.pack()

rectangle_entry1 = Entry(rectangle_frame)
rectangle_entry1.pack()

l = Label(rectangle_frame, text="Enter Width:")
l.pack()

rectangle_entry2 = Entry(rectangle_frame)
rectangle_entry2.pack()

b = Button(rectangle_frame, text="Calc", command=calc_rectangle)
b.pack()

b = Button(rectangle_frame, text="BACK", command=show_main_frame)
b.pack()

# --- frame without .pack() ---

triangle_frame = Frame(window)

triangle_result = Label(triangle_frame, text="")
triangle_result.pack()

l = Label(triangle_frame, text="Enter base:")
l.pack()

triangle_entry1 = Entry(triangle_frame)
triangle_entry1.pack()

l = Label(triangle_frame, text="Enter Height:")
l.pack()

triangle_entry2 = Entry(triangle_frame)
triangle_entry2.pack()

b = Button(triangle_frame, text="Calc", command=calc_triangle)
b.pack()

b = Button(triangle_frame, text="BACK", command=show_main_frame)
b.pack()

# ---

window.mainloop()

然后您就不需要功能lambda

与第二帧相同。


Bryan Oakley创建了一个更复杂的版本,该版本使用类command=lambda:change_frame(rectanlge_frame) ,有时您可以在Stackoverflow的问题中看到这些类。